Для Collection
это просто, просто используйте метод Colleciton#contains()
в 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>
Для 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
значениях.