4

我有一个带有 a 的页面,<h:selectOneMenu>我想根据菜单的所选值显示一些字段或其他字段。这可能吗?如果可以,怎么做?

<h:selectOneMenu id="productname" value="#{product.productname}" required="true"> 
    <f:selectItem itemLabel="select" itemValue="null" />  
    <f:selectItem itemLabel="Detetgent" itemValue="Detergent"/>  
    <f:selectItem itemLabel="Dishwash" itemValue="Dishwash" />  
    <f:selectItem itemLabel="Powder" itemValue="Powder" />  
    <f:selectItem itemLabel="Liquid" itemValue="Liquid" />       
</h:selectOneMenu>
<h:panelGroup rendered="Detergernt">
    <p>This will be shown if the selected item Detergent.</p>
</h:panelGroup>
<h:panelGroup >
    <p>This will be shown if the selected item Dishwash.</p>
</h:panelGroup>
<h:panelGroup >
    <p>This will be shown if the selected item equal to powder.</p>
</h:panelGroup>
<h:panelGroup >
    <p>This will be shown if the selected item equals to Liquid.</p>
</h:panelGroup>
4

3 回答 3

5

如果返回所需的值,您只需要检查rendered属性。#{product.productname}为了更新所有这些组件,您应该在菜单中添加一个更新所有有条件渲染组件<f:ajax>的公共父组件(始终呈现)的菜单。

<h:selectOneMenu id="productname" value="#{product.productname}" required="true"> 
    <f:selectItem itemLabel="select" itemValue="null" />
    <f:selectItem itemLabel="Detetgent" itemValue="Detergent"/>
    <f:selectItem itemLabel="Dishwash" itemValue="Dishwash" />
    <f:selectItem itemLabel="Powder" itemValue="Powder" />
    <f:selectItem itemLabel="Liquid" itemValue="Liquid" />
    <f:ajax render="groups" />
</h:selectOneMenu>
<h:panelGroup id="groups">
    <h:panelGroup rendered="#{product.productname == 'Detergent'}">
        <p>This will be shown if the selected item Detergent.</p>
    </h:panelGroup>
    <h:panelGroup rendered="#{product.productname == 'Dishwash'}">
        <p>This will be shown if the selected item Dishwash.</p>
    </h:panelGroup>
    <h:panelGroup rendered="#{product.productname == 'Powder'}">
        <p>This will be shown if the selected item equal to Powder.</p>
    </h:panelGroup>
    <h:panelGroup rendered="#{product.productname == 'Liquid'}">
        <p>This will be shown if the selected item equals to Liquid.</p>
    </h:panelGroup>
</h:panelGroup>

也可以看看:

于 2012-11-29T11:30:39.757 回答
1
<h:selectOneMenu id="productname" value="#{product.productname}" required="true"> 
    <f:selectItem itemLabel="select" itemValue="null" />  
    <f:selectItem itemLabel="Detetgent" itemValue="Detergent"/>  
    <f:selectItem itemLabel="Dishwash" itemValue="Dishwash" />  
    <f:selectItem itemLabel="Powder" itemValue="Powder" />  
    <f:selectItem itemLabel="Liquid" itemValue="Liquid" />    
    <p:ajax event="onselect" update="selectedOp" listener="#{product.updateSelectedValue}" />
</h:selectOneMenu>
<h:panelGroup rendered="{product.updateSelectedValue ne null}" id="selectedOp">
    <p>This will be show selected value</p>
    #{product.updateSelectedValue}
</h:panelGroup>

这是您可以从页面上的下拉列表中显示所选值的方式。我假设您使用的是 PrimeFaces,因此<p:ajax><h:selectOneMenu >. 还添加条件 on <h:panelGroup rendered="{product.updateSelectedValue ne null}">,以便在选择的值不是 时显示null

于 2012-11-29T09:17:51.050 回答
0

是的,你可以做到这一点。请务必粘贴您的页面,以便我在页面本身上进行解释。

这个想法是将 an<a4j:outputPanel>用作容器并 <h:panelGrourp layout="block" rendered="#{}">用作需要隐藏的字段的包装器。
的选定值selectOneMenu将用于 的rendered属性<h:panelGroup>

于 2012-11-28T05:29:47.963 回答