Подтвердить что ты не робот

Как создать массив в JSF EL?

Я хочу создать массив в JSF EL. Как я могу это сделать? Возможно ли это?

Чтобы проиллюстрировать, что я пытаюсь сделать:

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

Ответ 1

Если вы используете 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> в <f:selectItems>.

Ответ 2

Это возможно с помощью EL 3.0:

[1, 2, 3].toArray()

Сначала создается список, а затем преобразуется в массив.

По крайней мере, с недавними версиями JSF вам даже не нужен массив для f:selectItems, любой Iterable будет делать. Итак:

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

Для получения дополнительной информации о построении коллекции в EL см. Спецификация EL 3.0 - окончательный выпуск, 2.2 Построение объектов коллекции.

Ответ 3

Я использую ArrayUtils из apache для этого. сначала зарегистрируйте класс 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. Для этого я использовал компоненты p: importConstants, не уверен, что можно сделать в простой JSF.

вот как я его использую:

<p:importConstants type="org.apache.commons.lang3.ArrayUtils" var="ArrayUtils" />