JSTL nếu thẻ cho các chuỗi bằng nhau


90

Tôi có một biến từ một đối tượng trên trang JSP của mình:

<%= 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 phần 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 này? Tôi đã thử một cái gì đó như

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

Nhưng ở 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 scriptlets tức là

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

Cảm ơn cho bất kỳ câu trả lời hoặc nhận xét.


1
Bạn có thể vui lòng giải thích getPSystem()ansokanInfo? bạn đặt chúng trong yêu cầu hay truy cập chúng thông qua import?
Santhosh

1
IIRC Tôi đã đặt chúng trong yêu cầu và giải pháp (cách giải quyết) là nâng cấp websphere như BalusC đã yêu cầu và sau đó một phiên bản mới hơn có thể gọi các phương thức bean bằng các thẻ. Tôi đang 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 trong đó BalusC cho chúng tôi biết rằng tôi đang sử dụng phiên bản websphere cần phiên bản mới hơn để có thể gọi các phương thức.
Niklas R.

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

@SanKrish Tôi không sử dụng JSP bây giờ. Tôi hy vọng nó phù hợp với bạn và nó đã được cập nhật cho các phiên bản mới hơn của máy chủ ứng dụng.
Niklas R.

Câu trả lời:


145

Thử:

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

JSP / Servlet 2.4 (tôi nghĩ đó là số phiên bản) không hỗ trợ các cuộc gọi phương thức trong EL và chỉ hỗ trợ các thuộc tính. 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 hỗ trợ (tức là Tomcat 7).


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

3
Tôi đã từ bỏ JSP (X). Tôi sử dụng Mustache ( github.com/samskivert/jmustache ) hoặc ngôn ngữ tạo khuôn mẫu của riêng tôi JATL ( code.google.com/p/jatl ).
Adam Gent

1
Làm thế nào bạn sẽ làm nhiều chuỗi? Phải có một cách tốt hơn<c:if test = "${ansokanInfo.PSystem == 'NAT' || ansokanInfo.PSystem == 'CAT'}">
Dillon


16

Tôi nghĩ rằng các câu trả lời khác bỏ lỡ một chi tiết quan trọng liên quan đến 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 thức thành tên thuộc tính được chỉ định trong 'Intros Inspector.decpitalize` , là một phần của tiêu chuẩn java bean:

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

Do đó "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 sẽ giống như sau, hãy lưu ý viết hoa 'P':

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

2
Getters và setters với một quy ước đặt tên là khá nhiều định nghĩa của một bean java. Tôi đoán chúng ta cần thêm một số thông tin liên quan đến vị trí mà biến được chuyển đến jsp. Để có sẵn cho EL, nó phải nằm trong một số phạm vi, 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.
Jörn Horstmann

5

Bạn có thể sử dụng script, tuy nhiên, đây không phải là cách để thực hiện. Ngày nay các tập lệnh nội tuyến 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. Nếu đối tượng ansokanInfo nằm trong phạm vi yêu cầu hoặc phiên của bạn, việc 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ơ bản. $ {ansokanInfo.pSystem} sẽ gọi phương thức getter đối tượng. Nếu tất cả đều hoạt động, bạn có thể sử dụng:

<c:if test="${ ansokanInfo.pSystem  == 'NAT'}"> tataa </c:if>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.