index for jsf jsf-2 jstl el uirepeat

jsf - for - Especifique la representación condicional del elemento dentro de<ui: repeat>? El<c: if> no parece funcionar



ui:repeat index (1)

No con etiquetas JSTL, no. Se ejecutan durante el tiempo de compilación de la vista, no durante el tiempo de renderizado de la vista. Puede visualizarlo de la siguiente manera, cuando JSF construye la vista, las etiquetas JSTL se ejecutan desde abajo hacia abajo y el resultado es un árbol de componentes JSF puro. Luego, cuando JSF presenta la vista, los componentes de JSF se ejecutan de arriba a abajo y el resultado es un montón de HTML. Por lo tanto, JSTL y JSF no se ejecutan en sincronización como cabría esperar de la codificación. En el momento en que se ejecuta <c:if> , el #{topicId} no está disponible en el ámbito.

En lugar de utilizar <c:if> , debe especificar la condición en el atributo rendered del componente de interés JSF. Como en realidad no tienes ninguno, puedes envolverlo en un <ui:fragment> .

<ul> <ui:repeat value="#{topics.list}" var="topicId" > <li>#{topicId}</li> <ui:fragment rendered="#{topicId eq -1}"><br/></ui:fragment> </ui:repeat> </ul>

Las alternativas son <h:panelGroup>

<h:panelGroup rendered="#{topicId eq -1}"><br/></h:panelGroup>

o en su caso específico <h:outputText escape="false">

<h:outputText value="&lt;br/&gt;" escape="false" rendered="#{topicId eq -1}" />

como ambos tampoco emiten nada más a la salida HTML cuando no se especifican atributos del lado del cliente.

Ver también:

No relacionado con el problema concreto, ese es el lugar equivocado para <br/> . Sería ignorado por cualquier navegador web que respete la especificación HTML. ¿No quieres decir que esté dentro del <li> ? O mejor, dale una class y deja que CSS le dé un margin-bottom .

Estoy tratando de construir condicionalmente una lista personalizada usando <ui:repeat> . En cada aparición de -1 como elemento-valor en la lista, debo agregar un salto de línea.

Intenté usar <c:if> dentro <ui:repeat> para eso, pero no parece funcionar. Siempre se evalúa lo false .

<ul> <ui:repeat value="#{topics.list}" var="topicId" > <li>#{topicId}</li> <c:if test="#{topicId eq -1}"> <br/> </c:if> </ui:repeat> </ul>

es posible?