如何有条件地渲染f:selectItem标签?

Raj*_*pta 38 jsf rendered-attribute

如何为<f:selectItem>标记指定条件呈现.我需要<f:selectItem>根据特定用户的状态显示选项.

例如,我想要的东西如下:

<f:selectItem itemLabel="Yes! I need a girlfriend!"
             rendered="false(or some boolean condition)"
             itemValue="o1"/>
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 64

<f:selectItem> 支持的rendered属性.您最接近的赌注是itemDisabled仍显示该项目的属性,但使其无法选择.这也得到了支持<f:selectItems>.

如果<p:selectOneMenu>您可以添加一些CSS来隐藏禁用的项目.

<p:selectOneMenu ... panelStyleClass="hideDisabled">
    <f:selectItem itemValue="1" itemLabel="one" />
    <f:selectItem itemValue="2" itemLabel="two" itemDisabled="#{some.condition}" />
    <f:selectItem itemValue="3" itemLabel="three" />
</p:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
.ui-selectonemenu-panel.hideDisabled .ui-selectonemenu-item.ui-state-disabled {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

如果<h:selectOneMenu>您更依赖于webbrowser是否支持通过CSS隐藏已禁用的选项:

<h:selectOneMenu ... styleClass="hideDisabled">
    <f:selectItem itemValue="1" itemLabel="one" />
    <f:selectItem itemValue="2" itemLabel="two" itemDisabled="#{some.condition}" />
    <f:selectItem itemValue="3" itemLabel="three" />
</h:selectOneMenu>
Run Code Online (Sandbox Code Playgroud)
select.hideDisabled option[disabled] {
    display: none;
}
Run Code Online (Sandbox Code Playgroud)

服务器端的替代方案是<c:if>在个体周围引入JSTL ,<f:selectItem>以便按顺序将其添加到视图中(确保您了解JSTL在JSF中的工作方式:JSF2 Facelets中的JSTL ...有意义吗?):

<f:selectItem itemValue="1" itemLabel="one" />
<c:if test="#{not some.condition}">
    <f:selectItem itemValue="2" itemLabel="two"  />
</c:if>
<f:selectItem itemValue="3" itemLabel="three" />
Run Code Online (Sandbox Code Playgroud)

或者,您可以List<SelectItem>根据计算的条件简单地动态填充辅助bean中的a 并将其绑定<f:selectItems>.

  • 别客气.然而,它有一个警告:当它依赖于JSF转发器组件的重复变量时,它不会起作用,例如`ui:repeat`,`h:dataTable`等. (3认同)

Rog*_*ays 6

我使用的解决方法是设置itemDisabled属性并使用此CSS:

select option[disabled] { display: none; }
Run Code Online (Sandbox Code Playgroud)

但它需要在JSF中正确修复.


归档时间:

查看次数:

31225 次

最近记录:

6 年,5 月 前