我想在JSF EL中創建一個數組。我怎樣才能做到這一點?它甚至有可能嗎?如何在JSF EL中創建數組?
爲了說明什麼,我想:
<rich:pickList addAllText="" addText="" removeAllText="" removeText="">
<f:selectItems value="#{'Test', 'TestTest', 'TestTestTest'}" />
</rich:pickList>
我想在JSF EL中創建一個數組。我怎樣才能做到這一點?它甚至有可能嗎?如何在JSF EL中創建數組?
爲了說明什麼,我想:
<rich:pickList addAllText="" addText="" removeAllText="" removeText="">
<f:selectItems value="#{'Test', 'TestTest', 'TestTestTest'}" />
</rich:pickList>
如果你在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', ',')}" />
無論哪種方式,這需要在<f:selectItems>
支撐的List<T>
最小JSF 2.0的。
這是可能與EL 3.0:
[1, 2, 3].toArray()
這首先創建一個列表,然後將其轉換爲一個數組。
至少在最近的JSF版本中,你甚至不需要數組f:selectItems
,任何Iterable都可以。所以:
<f:selectItems value="#{['Test', 'TestTest', 'TestTestTest']}" />
有關館藏建設的EL更多信息,請參閱集合對象的EL 3.0 Specification - final release,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'的方法:如果你不能訪問常數EMPTY_INT_ARRAY
#{myBean.aMethod(arrayUtils.add(ArrayUtils.EMPTY_INT_ARRAY, 1))}
上面的代碼將無法正常工作。爲此,我使用了primefaces p:importConstants組件,不確定是否可以在普通的JSF中完成。
這是我如何使用它:
<p:importConstants type="org.apache.commons.lang3.ArrayUtils" var="ArrayUtils" />
或者,如果使用JSF 2,添加Omnifaces到項目和使用':createArray' :) – elias
大,這工作,但我不得不使用' xmlns:fn =「http:// java.sun.com/jsp/jstl/functions'而不是'http:// java.sun.com/jsp/jstl/core'。 – Sandro
不客氣,我修正了錯字。 – BalusC