2012-05-22 68 views
13

我想在JSF EL中創建一個數組。我怎樣才能做到這一點?它甚至有可能嗎?如何在JSF EL中創建數組?

爲了說明什麼,我想:

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

回答

18

如果你在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的。

+3

或者,如果使用JSF 2,添加Omnifaces到項目和使用':createArray' :) – elias

+0

大,這工作,但我不得不使用' xmlns:fn =「http:// java.sun.com/jsp/jstl/functions'而不是'http:// java.sun.com/jsp/jstl/core'。 – Sandro

+0

不客氣,我修正了錯字。 – BalusC

4

這是可能與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建設。

0

我使用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" />