如何在 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 才能支持&lt;f:selectItems&gt; 中的List&lt;T&gt;

【讨论】:

或者,如果使用 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 中创建一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 中创建现有组件的组合?

如何在 jsf 中创建用户友好和 seo 友好的 url?

如何从数组中创建 jQuery 对象?

如何在JSF中创建可重用的组件?

如何在 JSF 2.0 中创建自定义 404 消息?

如何在 JSF 中创建选择列表?尝试使用 JS/jQuery 移动项目,但使用“验证错误:值无效”提交错误