当前位置: 动力学知识库 > 问答 > 编程问答 >

jsf - Conditionally render a component based on selectOneMenu value

问题描述:

Is there a way to render a component based on the current value the user has selected from a selectOneMenu component? My selectOneMenu component is populated with an enum consisting of two values, smoker and non-smoker. If the user has smoker selected I want to render a checkbox below it which lets the user check how many they smoke a day 10, 20, 30+, etc. I also want the opposite to work if they user has selected non-smoker i.e. the check boxes don't render/disappear.

网友答案:

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:

  • Why do I need to nest a component with rendered="#{some}" in another component when I want to ajax-update it?
  • How to load and display dependent h:selectOneMenu on change of a h:selectOneMenu
  • Conditionally displaying JSF components
分享给朋友:
您可能感兴趣的文章:
随机阅读: