【问题标题】:How do i hide the f:selectItem tag under h:selectOneRadio如何隐藏 h:selectOneRadio 下的 f:selectItem 标签
【发布时间】:2012-01-01 00:51:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: java javascript jsf


    【解决方案1】:

    &lt;f:selectItem&gt; 是一个标记处理程序(在视图构建期间评估),而不是 JSF 组件(在视图渲染期间评估)。您只能使用另一个标签处理程序来显示/隐藏它,例如 JSTL &lt;c:if&gt;

    <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 组件(例如&lt;h:dataTable&gt;&lt;ui:repeat&gt;)准备好时,上述操作才有效,而您必须在支持bean 代码中执行此操作。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你可以试着把它包围在

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

          【讨论】:

          • 是的,我已经考虑过了,但是我有多个选择项,然后每次我需要为每个选择项使用单选按钮.. :(
          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-07-25
            • 1970-01-01
            • 1970-01-01
            • 2013-09-21
            • 1970-01-01
            • 1970-01-01
            • 2017-11-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多