Question

I have some cases where I have a JSF page and for a single input I'd like to set more than one value on the backing bean without doing code in the backing bean.

I can set a single value:

 <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" />

But if I wanted to set more than one at once can that be done on the JSF page?

#{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
Was it helpful?

Solution

Bind the other properties via <h:inputHidden> and use JavaScript during change event of the first input to manipulate the value of those hidden inputs to the same as the first input's current value.

Here's a kickoff example:

<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>

Obviously, feel free to refactor to a JS function or throw in some jQuery. Keep in mind that this all won't work if client has JS disabled, and that the enduser could manipulate JS code and request parameters. A server side solution is more robust if you absolutely need the values to be equal.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top