17

我想在 JSF EL 中创建一个数组。我怎样才能做到这一点?甚至可能吗?

为了说明我正在尝试的内容:

<rich:pickList addAllText="" addText="" removeAllText="" removeText="">
    <f:selectItems value="#{'Test', 'TestTest', 'TestTestTest'}" />
</rich:pickList>
4

3 回答 3

22

如果您使用的是 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>

于 2012-05-22T15:01:13.997 回答
4

EL 3.0 可以:

[1, 2, 3].toArray()

这首先创建一个 List,然后将其转换为数组。

至少对于最近的 JSF 版本,您甚至不需要数组f:selectItems,任何 Iterable 都可以。所以:

<f:selectItems value="#{['Test', 'TestTest', 'TestTestTest']}" />

有关 EL 中集合构造的更多信息,请参阅EL 3.0 规范 - 最终版本,2.2 集合对象的构造。

于 2015-07-14T10:00:47.457 回答
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" />
于 2017-04-20T10:12:43.470 回答