2011-02-14 11 views
6

Próbuję wyświetlić wartość <h:outputText> lub <h:commandLink> zgodnie z właściwością String zwróconą przez komponent bean. Mam problemy podczas porównywania ciągów .. Oto ilustracja:Jak porównać 2 ciągi z <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> 

Jednak porównania nie działają. Czy to jest właściwy sposób? Można to zrobić bez <jsp:useBean....> jak to zrobiono w: JSP sample

Dzięki za wszelką pomoc

Odpowiedz

10

Wydaje się, że używając tego w <h:dataTable>. Znaczniki JSTL są oceniane tylko podczas wyświetlania widoku, a nie podczas renderowania widoku. Sprowadza się to do tego, że JSTL najpierw biegnie od góry do dołu, a następnie przekazuje uzyskany wynik do JSF, aby ponownie przejść od góry do dołu. Obecnie znaczniki JSTL są oceniane w datowalnym zbiorze JSF, iterowany element danych (ten w atrybucie var) nie jest dostępny dla JSTL. Dlatego wynik testu jest zawsze false.

Po prostu użyj atrybutu komponentu JSF: rendered.

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

Oto kilka przykładów, jak można wykorzystać atrybut 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'}" /> 

niezwiązane z konkretnym problemem, Roseindia jest not najlepszym źródłem uczenia JSF. Zaleciłbym udać się do innych zasobów.

+0

Po prostu skonsultowałem się z zespołem Java Arquitect mojego zespołu i on dał mi dokładnie taką samą odpowiedź jak ty. Bardzo dziękuję za odpowiedź! :) – camiloqp

+0

Nie ma za co. – BalusC

+0

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

Powiązane problemy