JSTL c:si no funciona dentro de una JSF h:dataTable

Estoy tratando de utilizar <c:if> a condicionalmente poner un <h:outputLink> dentro de un <h:dataTable> cuando el estado está terminado.

<h:dataTable value="#{bean.items}" var="item" width="80%">
    <h:column>
        <f:facet name="header">
            <h:outputText value="State" />
        </f:facet>

        <c:if test="#{item.state != 'Finish'}">
            <h:outputText value="Missing value" />
        </c:if>
        <c:if test="#{item.state == 'Finish'}">
            <h:outputLink value="myLink">
                <h:outputText value="Value = #{item.state}" />
            </h:outputLink>
        </c:if>
    </h:column>
</h:dataTable>

Pero esto no funciona, ¿por qué es eso y cómo puedo solucionarlo?

OriginalEl autor ErVeY | 2010-08-09

1 Kommentar

  1. 48

    Etiquetas JSTL son evaluados durante la construcción de la vista, no durante la representación de la vista. Usted puede visualizar de la siguiente manera: Cuando un árbol se crea por primera vez, todas las etiquetas JSTL se ejecuta y el resultado es una vista con sólo componentes JSF. Cada vez que una vista de árbol de llegar, todos los componentes JSF se ejecuta y el resultado es HTML. Así: JSF+JSTL no se ejecuta en modo de sincronización como era de esperar a partir de la codificación. JSTL extiende desde la parte superior a la parte inferior primero, las manos el resultado de JSF y, a continuación, se JSF el turno a correr a partir de la parte superior a la parte inferior de nuevo. Esto puede conducir a resultados inesperados en JSF iteración componentes como UIData porque los datos de la fila (en su caso particular la #{item} objeto) es no disponibles mientras JSTL pistas.

    En pocas palabras: el Uso de JSTL para controlar el flujo de JSF árbol de componentes de construcción. El uso de JSF para el control de flujo de salida HTML generación.

    Desea utilizar el rendered atributo de aquí.

    <h:outputText value="Missing value" rendered="#{item.state ne 'Finish'}" />
    <h:outputLink value="myLink" rendered="#{item.state eq 'Finish'}">
        <h:outputText value="Value = #{item.state}" />
    </h:outputLink>

    Véase también:

    OriginalEl autor BalusC

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea