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 函数。具体例子见How to create a custom EL function to invoke a static method? E.g.
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 值。