3

在某些情况下,我有一个 JSF 页面,对于单个输入,我想在支持 bean 上设置多个值,而不在支持 bean 中执行代码。

我可以设置一个值:

 <h:selectOneRadio id="selectMembershipLevel" class="TODO_SELECT" 
value="#{joinBackingBean.map[joinBackingBean.map.primary_memberInfo_membershipType_code]}">
 <f:selectItem id="basic" itemLabel="#{overrideMsg.pbBasic}" itemValue="B" />
 <f:selectItem id="plus" itemLabel="#{overrideMsg.pbPlus}" itemValue="P" />
 <f:selectItem id="plusRV" itemLabel="#{overrideMsg.pbPlusRV}" itemValue="RV" />

但是,如果我想一次设置多个,可以在 JSF 页面上完成吗?

#{joinBackingBean.map[joinBackingBean.map.primary_memberInfo_membershipType_code]}
#{joinBackingBean.map[joinBackingBean.map.primary_memberInfo_membershipType_desc]}//Bdesc
#{joinBackingBean.map[joinBackingBean.map.primary_memberInfo_membershipType_type]}//Btype
4

1 回答 1

5

在第一个输入事件期间通过绑定其他属性<h:inputHidden>并使用 JavaScriptchange将这些隐藏输入的值操作为与第一个输入的当前值相同。

这是一个启动示例:

<h:form id="form">
    <h:selectOneRadio value="#{bean.input1}" onchange="document.getElementById('form:input2').value = document.getElementById('form:input3').value = this.value">
        <f:selectItem itemValue="one" />
        <f:selectItem itemValue="two" />
        <f:selectItem itemValue="three" />
    </h:selectOneRadio>
    <h:inputHidden id="input2" value="#{bean.input2}" />
    <h:inputHidden id="input3" value="#{bean.input3}" />
    ...
</h:form>

显然,您可以随意重构为 JS 函数或添加一些 jQuery。请记住,如果客户端禁用了 JS,这一切都将不起作用,并且最终用户可以操纵 JS 代码和请求参数。如果您绝对需要值相等,则服务器端解决方案会更加健壮。

于 2013-01-25T18:06:11.633 回答