selectitems one llenar how ejemplo dinamico jsf rendered-attribute

jsf - llenar - selectonemenu primefaces ajax



¿Cómo se puede representar condicionalmente una etiqueta f: selectItem? (6)

El <f:selectItem> no admite el atributo rendered . Su apuesta más cercana es el atributo itemDisabled que aún muestra el artículo, pero lo hace no seleccionable. Esto también se admite en <f:selectItems> .

En el caso de <p:selectOneMenu> , puede agregar un poco de CSS para ocultar los elementos deshabilitados.

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

En el caso de <h:selectOneMenu> usted es más dependiente de si el <h:selectOneMenu> admite ocultar las opciones deshabilitadas a través de 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; }

La alternativa del lado del servidor es traer un JSTL <c:if> alrededor del individuo <f:selectItem> para agregarlo <f:selectItem> a la vista de esta manera (asegúrese de estar al tanto de cómo funciona JSTL en JSF: JSTL en JSF2 Facelets ... tiene sentido? ):

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

O bien, simplemente puede rellenar dinámicamente una List<SelectItem> en el bean de respaldo en función de las condiciones calculadas y vincularlo con <f:selectItems> .

¿Cómo puedo especificar una representación condicional para una etiqueta <f:selectItem> . Necesito mostrar las opciones de <f:selectItem> acuerdo con el estado de un usuario específico.

Por ejemplo, quería algo como:

<f:selectItem itemLabel="Yes! I need a girlfriend!" rendered="false(or some boolean condition)" itemValue="o1"/>


La solución alternativa que uso es configurar el atributo itemDisabled y usar este CSS:

select option[disabled] { display: none; }

Pero debe corregirse adecuadamente en JSF.


Partiendo de la respuesta de BalusC, es posible hacerlo sin una lista de respaldo en las versiones más recientes de JSF (estoy usando JSF 2.2):

<h:selectOneMenu id="Value" value="#{cc.attrs.value}"> <f:selectItem itemLabel="#{cc.attrs.placeholder}" noSelectionOption="true"> <f:passThroughAttribute rendered="#{not empty cc.attrs.placeholder}" name="hidden" value=""/> </f:selectItem> <f:selectItems value="#{empty cc.attrs.allLabel ? [] : [1]}" var="item" itemLabel="#{cc.attrs.allLabel}" itemValue="#{cc.attrs.allValue}"/> <f:selectItems value="#{cc.attrs.codeList}" var="code" itemLabel="#{code.codeDesc}" itemValue="#{code.userCode}"/> </h:selectOneMenu>

Lo envolví en un componente compuesto con algunos requisitos específicos. La parte relacionada con esta pregunta es usar f:selectItems con un valor de [] o [1] . Cuando su condición lo hace usar [] , se omite por completo, y cuando utiliza [1] , coloca un solo elemento con los valores que desea.


Puedes envolverlo en ui:fragment código de ui:fragment :

<ui:fragment rendered="false(or some boolean condition)"> <f:selectItem itemLabel="Yes! I need a girlfriend!" itemValue="o1"/> </ui:fragment>

Entonces, el elemento se representará solo cuando la codificación booleana sea verdadera.


Resolví mi problema haciendo esto

<p:selectOneRadio id="myId" value="#{myView.myProperty}"> <h:panelGroup rendered="#{myView.showMyOption}"> <f:selectItem itemLabel="My Option" itemValue="0" /> </h:panelGroup> <f:selectItem itemLabel="My Option 1" itemValue="1" /> <f:selectItem itemLabel="My Option 2" itemValue="2" /> <p:selectOneRadio


<c:if> para mí tampoco funciona si depende de la variable repetida de un componente `(en la primera fase de compilación funciona, pero usando ajax y actualizando la colección de la para cada falla, mostrando algunos ítems dos veces y otros) no)

este es realmente un gran problema en JSF. La desactivación no siempre es una opción, y de esta manera se necesita mucho más código en el bean para abordar tales cosas "fáciles".