The <f:selectItem>
does not https://docs.oracle.com/javaee/7/javaserver-faces-2-2/vdldocs-facelets/f/selectItem.html支持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>
.ui-selectonemenu-panel.hideDisabled .ui-selectonemenu-item.ui-state-disabled {
display: none;
}
的情况下<h:selectOneMenu>
您更依赖于网络浏览器是否支持通过 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>
select.hideDisabled option[disabled] {
display: none;
}
服务器端的替代方案是引入 JSTL<c:if>
围绕个人<f:selectItem>
有条件地将其添加到视图中,如下所示(确保您了解 JSTL 在 JSF 中的工作原理:JSF2 Facelets 中的 JSTL...有意义吗? https://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense):
<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" />
或者,您可以简单地动态填充List<SelectItem>
根据计算的条件在支持 bean 中并将其绑定<f:selectItems>
.