Mah*_*leh 5 arrays collections jsf contains el
我想知道在EL 2.2中是否包含集合/数组的方法,或者我必须自定义一个?
要求:我有一个字符串数组,我想找到它是否包含一个特定的字符串.
情况:我正在循环输入复选框列表来渲染它们,我想检查当前复选框,如果它的值存在于复选框数组中.
更新:
EL有这样的方法吗?
如果此方法不可用,那么请提供您的建议,以获得包含元素的字符串数组的最佳性能方法.
为了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>
Run Code Online (Sandbox Code Playgroud)
对于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>
Run Code Online (Sandbox Code Playgroud)
如果您还没有使用EL 3.0,则需要创建自定义EL功能.有关具体示例,请参阅如何创建自定义EL函数以调用静态方法?例如
public static boolean contains(Object[] array, Object item) {
return Arrays.asList(array).contains(item);
}
Run Code Online (Sandbox Code Playgroud)
注册为
<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>
Run Code Online (Sandbox Code Playgroud)
并用作
<h:panelGroup ... rendered="#{func:contains(bean.panels, 'u1')}">
Run Code Online (Sandbox Code Playgroud)
这在JSTL中不可用.有一个fn:contains()
,但String
只适用于价值观.
归档时间: |
|
查看次数: |
13723 次 |
最近记录: |