2010-02-05 39 views
43

Xin xem Expression Language nàykiểm tra null trong ngôn ngữ biểu hiện JSF

styleClass="#{obj.validationErrorMap eq null ? ' ' : 
    obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}" 

Thậm chí nếu bản đồ là null, highlight_row phong cách được nhận được áp dụng.

Vì vậy, tôi đã thay đổi để

styleClass="#{empty obj.validationErrorMap ? ' ' : 
    obj.validationErrorMap.contains('key')?'highlight_field':'highlight_row'}" 

Thậm chí sau đó, highlight_row đang nhận được áp dụng.
nếu bản đồ là empty OR null Tôi không muốn bất kỳ kiểu nào được áp dụng.

Bất kỳ trợ giúp nào? và lý do cho hành vi này?

+0

bạn có đang sử dụng phần mở rộng JBoss EL không? – Bozho

+0

Tôi nghĩ có. jboss-el.jar có trong thư mục máy chủ \ appl \ lib. – crazyTechie

Trả lời

71

Sử dụng empty (nó kiểm tra cả rỗng và trống) và nhóm biểu thức bậc ba lồng nhau bằng dấu ngoặc đơn (EL là trong một số phiên bản/triển khai nhất định có vấn đề với các biểu thức lồng nhau). Do đó, vì vậy:

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(obj.validationErrorMap.contains('key') ? 'highlight_field' : 'highlight_row')}" 

Nếu vẫn vô ích (tôi sau đó sẽ kiểm tra configs JBoss EL), sử dụng "bình thường" EL cách tiếp cận:

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(obj.validationErrorMap['key'] ne null ? 'highlight_field' : 'highlight_row')}" 

Cập nhật: theo các ý kiến, Map hóa ra thực sự là một List (vui lòng thực hiện các quy ước đặt tên của bạn). Để kiểm tra xem List có chứa một mục theo cách "bình thường" EL hay không, hãy sử dụng JSTLfn:contains (mặc dù không được ghi chép rõ ràng, nó cũng hoạt động cho List).

styleClass="#{empty obj.validationErrorMap ? ' ' : 
(fn:contains(obj.validationErrorMap, 'key') ? 'highlight_field' : 'highlight_row')}" 
+0

Cảm ơn. Tôi sẽ kiểm tra điều này. validationErrorMap không phải là bản đồ. Tên không chính xác của tôi. Lấy làm tiếc. Danh sách mảng của nó chứa danh sách các trường nhập không xác nhận được. – crazyTechie

+0

Cảm ơn bạn đã đề xuất trong bản cập nhật. Ban đầu tôi muốn sử dụng bản đồ. Vì vậy, đã cho rằng tên. Nhưng sau đó đã thay đổi thành danh sách. Biểu thức đầu tiên hoạt động tốt (sử dụng dấu ngoặc đơn). Cảm ơn rất nhiều – crazyTechie

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