Как скрыть тег f: selectItem под h: selectOneRadio - PullRequest
3 голосов
/ 18 ноября 2011

Для <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 ]

3 голосов
/ 18 ноября 2011

<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>, тогда вышеупомянутое не сработает, и вам действительно придется сделать это в коде бэк-компонента.

2 голосов
/ 18 ноября 2011

Вы можете использовать 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));
          }
        }

        }
1 голос
/ 18 ноября 2011

вы можете попытаться окружить его

 <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>
0 голосов
/ 18 ноября 2011

Существует также свойство disabled для элементов f:selectItem, если оно соответствует вашим потребностям. В противном случае вам придется добавить их вручную, как предложил Мишель Фуко.

0 голосов
/ 18 ноября 2011

Я не могу понять разметку / источник, но, исходя из заголовка, я предложу

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

Если вы можете предоставить некоторые детали в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...