如何隐藏h:selectOneRadio下的f: selecttem标签?

How do i hide the f:selectItem tag under h:selectOneRadio

本文关键字:下的 selectOneRadio selecttem 标签 何隐藏 隐藏      更新时间:2023-09-26

对于<f:selectItem>,没有rendered属性。如何将特定的<f:selectItem>隐藏在<h:selectOneRadio>下?

<h:selectOneRadio id="radio1" styleClass="selectOneRadio" value="#{}" rendered="#{}">
    <f:selectItem itemValue="ALL" itemLabel="#{ONE}" />
    <f:selectItem itemValue="PRIVATE" itemLabel="#{TWO}" />
    <f:selectItem itemValue="GROUP" itemLabel="#{THREE}" />
</h:selectOneRadio>

在上面的代码中,我想隐藏第二项

<f:selectItem>是一个标记处理程序(在视图构建时计算),而不是JSF组件(在视图呈现时计算)。您只能使用其他标记处理程序显示/隐藏它,例如JSTL <c:if>

<h:selectOneRadio value="#{bean.selectedItem}">
    <f:selectItem itemValue="ALL" itemLabel="#{ONE}" />
    <c:if test="#{!bean.showPrivate}">
        <f:selectItem itemValue="PRIVATE" itemLabel="#{TWO}" />
    </c:if>
    <f:selectItem itemValue="GROUP" itemLabel="#{THREE}" />
</h:selectOneRadio>

只有当#{bean}在视图呈现期间由迭代的JSF组件(如<h:dataTable><ui:repeat>)准备时,上述操作才会失效,您必须在后台bean代码中执行。

您可以使用f:selectItems。例如:

 <h:selectOneRadio id="radio1" styleClass="selectOneRadio" rendered="true" value="controller.value">
    <f:selectItems  value="#{controller.items}"  />
 </h:selectOneRadio >

这是类控制器:

 public clss Controller(){
        private List<SelectItem> items = new ArrayList<SelectItem>();
        public Collection<SelectItem> getItems(){
        if (items.isEmpty()){
          createItems();
         }
         return this.items;
        }
        public private createItems(){
          if (condition){ //Here you can hidden the selectItem
             this.items.add(new SelectItem(value,label));
          }
        }
        }

你可以尝试用

包围它
 <h:panelGrid  rendered="">
   h:selectOneRadio
 </h:panelGrid  >

编辑:

<h:panelGroup>

编辑

这不是一个好主意,但我认为你可以通过代码冗余来实现,如下所示

       <h:panelGroup rendered="#{}">
            <h:selectOneRadio id="radio1" styleClass="selectOneRadio" rendered="true">
                <f:selectItem itemValue="ALL" itemLabel="one" />
                <f:selectItem itemValue="PRIVATE" itemLabel="two" />
                <f:selectItem itemValue="GROUP" itemLabel="THREE"  /> 
            </h:selectOneRadio>
        </h:panelGroup>
         <h:panelGroup rendered="#{!}">
            <h:selectOneRadio id="radio11" styleClass="selectOneRadio" rendered="true">
                <f:selectItem itemValue="ALL" itemLabel="one" />
                <f:selectItem itemValue="PRIVATE" itemLabel="two" />
            </h:selectOneRadio>
        </h:panelGroup>

我不能理解标记/源代码,但从标题猜测,我将建议

$("a.selectOneRadio f.selectItem").hide()

应该做假设

1) selectOneRadio is the class name of the a tag.
2) selectItem is the class name of the f tag.
3) f is not a tag in HTML. So if `f` is also a class name, you would have to use `.f .selectItem`

请在问题中提供一些细节。

如果满足您的需要,在f:selectItem元素上也有一个disabled属性。否则,你必须按照Michel Foucault的建议手动添加它们。