2012-04-17 36 views
71

Tôi đã có một biến từ một đối tượng trên trang JSP của tôi:JSTL nếu thẻ cho chuỗi bằng

<%= ansokanInfo.getPSystem() %>

Giá trị của biến là NAT đó là chính xác và tôi muốn áp dụng các yếu tố trang nhất định cho giá trị này. Làm cách nào để sử dụng thẻ để biết trường hợp? Tôi đã thử một cái gì đó như

<c:if test = "${ansokanInfo.getPSystem() == 'NAT'}">  
    process 
</c:if> 

Nhưng điều trên không hiển thị bất cứ điều gì. Tôi nên làm như thế nào? Hoặc tôi cũng có thể sử dụng tập lệnh mẫu tức là

<% if (ansokanInfo.getPSystem().equals("NAT"){ %> 
process 
<% } %> 

Cảm ơn bạn đã trả lời hoặc nhận xét.

+1

Bạn có thể xin hãy giải thích 'getPSystem() 'và' ansokanInfo'? Bạn có đặt chúng trong yêu cầu hoặc truy cập chúng thông qua 'import'? –

+1

IIRC Tôi đã đặt chúng trong yêu cầu và giải pháp (giải pháp thay thế) là nâng cấp websphere như được nói bởi BalusC và sau đó một phiên bản mới hơn có thể gọi phương thức bean bằng thẻ. Tôi đã sử dụng websphere tiêu chuẩn trong câu hỏi và một số phiên bản trước khi jsp và jstl có thể chạy các phương thức. Vui lòng tìm [câu hỏi khác của tôi] (http://stackoverflow.com/questions/10742174/el-equivalent-of-object-methodparameter-in-was-8) trong đó BalusC cho chúng tôi biết rằng tôi đang sử dụng một phiên bản websphere cần một phiên bản mới hơn để có thể gọi các phương thức. –

+1

Vì vậy, bây giờ bạn đã nâng cấp máy chủ ứng dụng của mình lên 8? và giải pháp đó có thất bại không? –

Trả lời

119

Hãy thử:

<c:if test = "${ansokanInfo.PSystem == 'NAT'}"> 

JSP/Servet 2.4 (Tôi nghĩ đó là số phiên bản) không hỗ trợ phương pháp gọi trong EL và tính hỗ trợ mà thôi. Các thùng chứa servlet mới nhất thực hiện các cuộc gọi phương thức (ví dụ Tomcat 7).

+1

Tôi đã cập nhật câu trả lời dựa trên câu trả lời của Jorn. Mẹo của chiếc mũ cho anh ta. –

+2

Tôi đã từ bỏ trên JSP (X). Tôi hoặc sử dụng Mustache (https://github.com/samskivert/jmustache) hoặc JATL ngôn ngữ riêng của tôi (http://code.google.com/p/jatl/). –

+0

Bạn sẽ làm nhiều chuỗi như thế nào? Phải có cách tốt hơn '' – Patience

31
<c:if test="${ansokanInfo.pSystem eq 'NAT'}"> 
5

Bạn có thể sử dụng tập lệnh, tuy nhiên, đây không phải là cách để thực hiện. Các tập lệnh trong dòng Nowdays hoặc mã JAVA trong các tệp JSP của bạn được coi là một thói quen xấu.

Bạn nên đọc thêm về JSTL nhiều hơn một chút. Nếu đối tượng ansokanInfo nằm trong yêu cầu của bạn hoặc phạm vi phiên, in đối tượng (phương thức toString()) như sau: $ {ansokanInfo} có thể cung cấp cho bạn một số thông tin cơ sở. $ {ansokanInfo.pSystem} nên gọi phương thức getter đối tượng. Nếu tất cả các công trình này đều hoạt động, bạn có thể sử dụng điều này:

<c:if test="${ ansokanInfo.pSystem == 'NAT'}"> tataa </c:if> 
16

Tôi nghĩ các câu trả lời khác bỏ sót một chi tiết quan trọng về tên thuộc tính để sử dụng trong biểu thức EL. Các quy tắc để chuyển đổi từ tên phương pháp để tên tài sản được quy định tại 'Introspector.decpitalize` mà là một phần của tiêu chuẩn đậu java:

này thường có nghĩa là chuyển đổi ký tự đầu tiên từ chữ hoa chữ thường, nhưng trong (bất thường) trường hợp đặc biệt khi có nhiều hơn một ký tự và cả hai ký tự đầu tiên và thứ hai là chữ hoa, chúng ta để nó một mình.

Vì vậy, "FooBah" trở thành "fooBah" và "X" trở thành "x", nhưng "URL" vẫn là "URL".

Vì vậy, trong trường hợp của bạn mã JSTL nên xem xét như sau, lưu ý thủ đô 'P':

<c:if test = "${ansokanInfo.PSystem == 'NAT'}"> 
+2

Getters và setters với quy ước đặt tên khá nhiều định nghĩa của một hạt java. Tôi đoán chúng ta cần một số thông tin thêm về nơi biến được chuyển đến jsp. Để có sẵn cho EL, nó phải nằm trong một phạm vi nào đó, ví dụ như một thuộc tính request hoặc pageContext. Một biến cục bộ được tạo bởi một khối tập lệnh sẽ không có sẵn cho EL. –

Các vấn đề liên quan