2011-02-14 18 views
6

Estoy tratando de mostrar un <h:outputText> o <h:commandLink> según una propiedad de Cadena devuelta por un bean de respaldo. Tengo problemas cuando se comparan las cadenas .. Aquí es la ilustración:¿Cómo comparar 2 cadenas con <c:if>?

<c:if test='#{column.header ne "Details"}'> 
    <h:outputText value="#{recordTable[column.property]}"/><br/> 
</c:if> 
<c:if test='#{column.header eq "Details"}'> 
    <h:commandLink value="#{column.header}" 
        action="#{searchBean.goToWarehouse}"/><br/> 
</c:if> 

Sin embargo, las comparaciones no están funcionando. ¿Es esta la forma correcta de hacerlo? ¿Se puede hacer sin el <jsp:useBean....> como se hace en: JSP sample

Gracias por cualquier ayuda

Respuesta

10

Usted parece estar utilizando esto en un <h:dataTable>. Las etiquetas JSTL se evalúan solo durante el tiempo de compilación de visualización, no durante el tiempo de visualización de visualización. Todo se reduce a esto: JSTL corre de arriba hacia abajo primero y luego pasa el resultado producido a JSF para volver a correr de arriba abajo. En el momento en que las etiquetas JSTL se evalúan dentro de una tabla de datos JSF, el elemento iterado de la tabla de datos (el que está en el atributo var) no está disponible para JSTL. Por lo tanto, el resultado de la prueba siempre es false.

Simplemente use el atributo rendered del componente JSF en su lugar.

<h:outputText value="#{recordTable[column.property]}" rendered="#{column.header ne 'Details'}"/> 
<h:commandLink value="#{column.header}" rendered="#{column.header eq 'Details'}" action="#{searchBean.goToWarehouse}"/> 
<br/> 

Éstos son algunos ejemplos más cómo se puede utilizar el atributo rendered:

<h:someComponent rendered="#{bean.booleanValue}" /> 
<h:someComponent rendered="#{bean.intValue gt 10}" /> 
<h:someComponent rendered="#{bean.objectValue == null}" /> 
<h:someComponent rendered="#{bean.stringValue != 'someValue'}" /> 
<h:someComponent rendered="#{!empty bean.collectionValue}" /> 
<h:someComponent rendered="#{!bean.booleanValue and bean.intValue != 0}" /> 
<h:someComponent rendered="#{bean.enumValue == 'ONE' or bean.enumValue == 'TWO'}" /> 

Sin relación con el problema concreto, Roseindia es not el mejor recurso de aprendizaje JSF. Yo recomendaría dirigirme a otros recursos.

+0

Acabo de consultar con el Arquitecto de Java de mi equipo y él me dio exactamente la misma respuesta que usted. ¡Muchas gracias por su respuesta! :) – camiloqp

+0

De nada. – BalusC

+0

http://balusc.blogspot.in/2008/06/what-is-it-with-roseindia.html – KNU

Cuestiones relacionadas