对于一个Collection
,很容易,在EL中只需使用Colleciton#contains()
方法即可。
<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>
对于一个
Object[]
(数组),您需要至少使用EL 3.0并利用其新的Lambda支持。
<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>
如果您还没有使用EL 3.0版本,您需要创建一个自定义的EL函数。具体示例,请参见如何创建自定义EL函数以调用静态方法?例如:
public static boolean contains(Object[] array, Object item) {
return Arrays.asList(array).contains(item);
}
这个被注册为
<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>
并且被用作
<h:panelGroup ... rendered="#{func:contains(bean.panels, 'u1')}">
在JSTL中不支持此功能。有一个fn:contains()
,但它只适用于String
值。
checked="#{utils.contains(myBean.array,'myBean.someIndicator') ? 'checked' : ''}"
- Mahmoud Salehchecked
的方式并不完全正确。当整个属性存在时,复选框/单选按钮被选中,而不考虑其值。您基本上想有条件地打印属性名称而不是属性值。 - BalusCInteger
,或修改方法以循环遍历数组,而不是将int[]
转换为无效的List<int>
。 - BalusC