2011-02-14 96 views
6

Tôi đang cố hiển thị <h:outputText> hoặc <h:commandLink> tương ứng với thuộc tính Chuỗi được trả về bởi bean sao lưu. Tôi gặp vấn đề khi so sánh chuỗi .. Dưới đây là hình minh họa:Cách so sánh 2 chuỗi với <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> 

Tuy nhiên sự so sánh không làm việc. Đây có phải là cách chính xác để làm điều đó không ?? Nó có thể được thực hiện mà không có sự <jsp:useBean....> như thực hiện trong: JSP sample

Nhờ sự giúp đỡ

Trả lời

10

Bạn dường như được sử dụng điều này trong một <h:dataTable>. Các thẻ JSTL chỉ được đánh giá trong thời gian xây dựng chế độ xem, không phải trong thời gian hiển thị chế độ xem. Nó tóm tắt về điều này: JSTL chạy từ trên xuống dưới đầu tiên và sau đó đưa kết quả được tạo ra cho JSF để chạy từ trên xuống dưới một lần nữa. Tại thời điểm các thẻ JSTL được đánh giá bên trong một JSF datatable, mục lặp lại của datatable (một trong thuộc tính var) không có sẵn cho JSTL. Do đó kết quả thử nghiệm luôn là false.

Chỉ cần sử dụng thuộc tính JS2 của thành phần rendered thay thế.

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

Dưới đây là một số ví dụ làm thế nào bạn có thể sử dụng các thuộc tính 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'}" /> 

Không liên quan đến vấn đề cụ thể, Roseindia là not tài nguyên học tập JSF tốt nhất. Tôi muốn khuyên bạn nên đến các tài nguyên khác.

+0

Tôi vừa tham khảo ý kiến ​​với Java Arquitect của nhóm của tôi và anh ấy đã cho tôi câu trả lời y hệt như bạn đã làm. Cảm ơn bạn rất nhiều vì câu trả lời của bạn! :) – camiloqp

+0

Bạn được chào đón. – BalusC

+0

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