如何在h:selectOneRadio下隐藏f:selectItem标记

时间:2011-11-18 07:57:52

标签: java javascript jsf

对于<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>

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

5 个答案:

答案 0 :(得分:3)

<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}<h:dataTable>之类的迭代JSF组件的视图渲染时间内准备好<ui:repeat>时,上述内容才会起作用,你真的必须在反而是支持bean代码。

答案 1 :(得分:2)

您可以使用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));
          }
        }

        }

答案 2 :(得分:1)

您可以尝试将其包围在

 <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>

答案 3 :(得分:0)

我无法理解标记/来源,但从标题中猜测,我会建议

$("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`

如果可以,请在问题中提供一些细节。

答案 4 :(得分:0)

disabled元素上还有一个f:selectItem属性,如果满足您的需求。否则你将不得不像Michel Foucault建议的那样手动添加它们。