Conditionally render a component based on selectOneMenu value

Just check the dropdown menu’s value in the rendered attribute of the target components and update their common parent by a <f:ajax>. Here’s a kickoff example:

<h:selectOneMenu value="#{bean.item}">
    <f:selectItem itemValue="one" />
    <f:selectItem itemValue="two" />
    <f:selectItem itemValue="three" />
    <f:ajax render="results" />
</h:selectOneMenu>

<h:panelGroup id="results">
    <h:panelGroup rendered="#{bean.item eq 'one'}">
        You have selected "one".
    </h:panelGroup>
    <h:panelGroup rendered="#{bean.item eq 'two'}">
        You have selected "two".
    </h:panelGroup>
    <h:panelGroup rendered="#{bean.item eq 'three'}">
        You have selected "three".
    </h:panelGroup>
</h:panelGroup>

If you’d like to perform some business logic based on the selected value, use <f:ajax listener>.

<f:ajax listener="#{bean.changeItem}" render="results" />
public void changeItem() {
    someResult = someService.getByItem(item);
}

See also:

Leave a Comment