我想在 JSF EL 中创建一个数组。我怎样才能做到这一点?甚至可能吗?
为了说明我正在尝试的内容:
<rich:pickList addAllText="" addText="" removeAllText="" removeText="">
<f:selectItems value="#{'Test', 'TestTest', 'TestTestTest'}" />
</rich:pickList>
如果您使用的是 EL 3.0 或更高版本,则可以直接在 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 来支持List<T>
in <f:selectItems>
。
EL 3.0 可以:
[1, 2, 3].toArray()
这首先创建一个 List,然后将其转换为数组。
至少对于最近的 JSF 版本,您甚至不需要数组f:selectItems
,任何 Iterable 都可以。所以:
<f:selectItems value="#{['Test', 'TestTest', 'TestTestTest']}" />
有关 EL 中集合构造的更多信息,请参阅EL 3.0 规范 - 最终版本,2.2 集合对象的构造。
我正在使用来自 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" />