Thật dễ dàng, chỉ cần sử dụng phương pháp Colleciton#contains()
trong EL.
<h:panelGroup id="p1" rendered="#{bean.panels.contains('p1')}">...</h:panelGroup>
<h:panelGroup id="p2" rendered="#{bean.panels.contains('p2')}">...</h:panelGroup>
<h:panelGroup id="p3" rendered="#{bean.panels.contains('p3')}">...</h:panelGroup>
Để có Object[]
(mảng), bạn cần tối thiểu EL 3.0 và sử dụng hỗ trợ Lambda mới.
<h:panelGroup id="p1" rendered="#{bean.panels.stream().anyMatch(v -> v == 'p1').get()}">...</h:panelGroup>
<h:panelGroup id="p2" rendered="#{bean.panels.stream().anyMatch(v -> v == 'p2').get()}">...</h:panelGroup>
<h:panelGroup id="p3" rendered="#{bean.panels.stream().anyMatch(v -> v == 'p3').get()}">...</h:panelGroup>
Nếu bạn chưa sử dụng EL 3.0, bạn cần tạo một hàm EL tùy chỉnh. Để biết ví dụ cụ thể, hãy xem How to create a custom EL function to invoke a static method? Ví dụ:
public static boolean contains(Object[] array, Object item) {
return Arrays.asList(array).contains(item);
}
được đăng ký như
<function>
<function-name>contains</function-name>
<function-class>com.example.Functions</function-class>
<function-signature>boolean contains(java.lang.Object[], java.lang.Object)</function-signature>
</function>
và được sử dụng như
<h:panelGroup ... rendered="#{func:contains(bean.panels, 'u1')}">
Đây không phải là có sẵn trong JSTL. Có một fn:contains()
, nhưng chỉ hoạt động với giá trị String
.
Chỉ không sử dụng mảng nếu bạn muốn làm nhiều hơn là chỉ giữ dữ liệu. Sử dụng bộ sưu tập sau đó. – BalusC
tốt, tôi đang sử dụng nó trên một thuộc tính đầu vào, nhưng phương pháp không được gọi là: 'checked =" # {utils.contains (myBean.array, 'myBean.someIndicator')? 'Checked': ''} "' –
Có lỗi EL nào không? Nhân tiện, cách bạn sử dụng 'kiểm tra' không hoàn toàn đúng. Một hộp kiểm/radiobutton được kiểm tra khi toàn bộ thuộc tính có mặt, bất kể giá trị của nó. Về cơ bản, bạn muốn in tên thuộc tính thay vì giá trị thuộc tính có điều kiện. – BalusC