如何在 JSF EL 中创建一个数组?
Posted
技术标签:
【中文标题】如何在 JSF EL 中创建一个数组?【英文标题】:How to create an array in JSF EL? 【发布时间】:2012-05-29 02:15:51 【问题描述】:我想在 JSF EL 中创建一个数组。我怎样才能做到这一点?有没有可能?
为了说明我正在尝试的内容:
<rich:pickList addAllText="" addText="" removeAllText="" removeText="">
<f:selectItems value="#'Test', 'TestTest', 'TestTestTest'" />
</rich:pickList>
【问题讨论】:
【参考方案1】:我正在使用 Apache 的 ArrayUtils 来执行此操作。 首先,将 ArrayUtils 类注册为 bean,以便您可以从 EL 访问它。
<managed-bean>
<managed-bean-name>arrayUtils</managed-bean-name>
<managed-bean-class>org.apache.commons.lang3.ArrayUtils</managed-bean-class>
<managed-bean-scope>application</managed-bean-scope>
</managed-bean>
然后你可以调用 ArrayUtils 的方法:
#myBean.aMethod(arrayUtils.add(ArrayUtils.EMPTY_INT_ARRAY, 1))
如果您无法访问常量 EMPTY_INT_ARRAY,上述代码将不起作用。为此,我使用了 primefaces p:importConstants 组件,不确定是否可以在纯 JSF 中完成。
这就是我使用它的方式:
<p:importConstants type="org.apache.commons.lang3.ArrayUtils" var="ArrayUtils" />
【讨论】:
【参考方案2】:如果您使用的是 EL 3.0 或更高版本,您可以construct collections directly in EL。
<f:selectItems value="#['Test','TestTest','TestTestTest']" />
如果您还没有使用 EL 3.0,您可以使用fn:split()
技巧解决这个特殊情况。
<html ... xmlns:fn="http://java.sun.com/jsp/jstl/functions">
...
<f:selectItems value="#fn:split('Test,TestTest,TestTestTest', ',')" />
无论哪种方式,这至少需要 JSF 2.0 才能支持<f:selectItems>
中的List<T>
。
【讨论】:
或者,如果使用 JSF 2,将 Omnifaces 添加到项目中并使用of:createArray
:)
很好,这很有效,虽然我不得不使用xmlns:fn="http://java.sun.com/jsp/jstl/functions
而不是http://java.sun.com/jsp/jstl/core
。【参考方案3】:
EL 3.0 可以做到:
[1, 2, 3].toArray()
这首先创建一个List,然后将其转换为一个数组。
至少对于最近的 JSF 版本,您甚至不需要 f:selectItems
的数组,任何 Iterable 都可以。所以:
<f:selectItems value="#['Test', 'TestTest', 'TestTestTest']" />
有关 EL 中集合构造的更多信息,请参阅EL 3.0 Specification - final release,2.2 集合对象的构造。
【讨论】:
以上是关于如何在 JSF EL 中创建一个数组?的主要内容,如果未能解决你的问题,请参考以下文章