2012-05-22 3 views
13

Voglio creare una matrice in JSF EL. Come lo posso fare? È possibile?Come creare un array in JSF EL?

per illustrare ciò che sto cercando:

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

risposta

18

Se siete su EL 3.0 o più recente, è possibile construct collections directly in EL.

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

Se non sei su EL 3.0 ancora, si potrebbe risolvere questo caso particolare con un fn:split() trucco.

<html ... xmlns:fn="http://java.sun.com/jsp/jstl/functions"> 
... 
<f:selectItems value="#{fn:split('Test,TestTest,TestTestTest', ',')}" /> 

In entrambi i casi, questo richiede un minimo di JSF 2.0 per il supporto di List<T> in <f:selectItems>.

+3

Oppure, se si utilizza JSF 2, aggiungere Omnifaces al progetto e l'uso di ': createArray' :) – elias

+0

Grande, questo funziona, anche se ho dovuto usare' xmlns: fn = "http: // java.sun.com/jsp/jstl/functions' invece di' http: // java.sun.com/jsp/jstl/core'. – Sandro

+0

Prego, ho risolto il problema errore di battitura. – BalusC

4

E 'possibile con EL 3.0:

[1, 2, 3].toArray() 

Questo crea una lista, e poi lo converte in un array.

Almeno con le versioni JSF recenti non è nemmeno necessario un array per f:selectItems, qualsiasi Iterable lo farà. Quindi:

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

Per ulteriori informazioni sulla costruzione di raccolta a EL vedere la EL 3.0 Specification - final release, 2.2 Costruzione di raccolta oggetti.

0

Sto usando ArrayUtils da apache per farlo. innanzitutto, registra la classe ArrayUtils come bean in modo da potervi accedere da 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> 

quindi è possibile chiamare i metodi ArrayUtils':

#{myBean.aMethod(arrayUtils.add(ArrayUtils.EMPTY_INT_ARRAY, 1))} 

il codice di cui sopra non funziona se non è possibile accedere al EMPTY_INT_ARRAY costante. Per questo, ho usato primefaces p: componente importConstants, non sicuro se può essere fatto in JSF semplice.

questo è come lo uso:

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