2012-05-22 27 views
13

Quiero crear una matriz en JSF EL. ¿Cómo puedo hacer eso? ¿Es posible?¿Cómo crear una matriz en JSF EL?

Para ilustrar lo que intento:

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

Respuesta

18

Si estás en EL 3.0 o posterior, puede construct collections directly in EL.

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

Si no estás en EL 3.0, sin embargo, se podría resolver este caso particular con un truco fn:split().

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

De cualquier manera, esto requiere un mínimo de JSF 2.0 para el apoyo de List<T> en <f:selectItems>.

+3

O, si utiliza JSF 2, agregue Omnifaces al proyecto y el uso de ': createArray' :) – elias

+0

Grande, esto funciona, aunque tuve que usar' xmlns: fn = "http: // java.sun.com/jsp/jstl/functions' en lugar de' http: // java.sun.com/jsp/jstl/core'. – Sandro

+0

De nada. Lo arreglé error de tipografía. – BalusC

4

Es posible con EL 3.0:

[1, 2, 3].toArray() 

Esto crea una lista primero, y luego la convierte en una matriz.

Al menos con versiones JSF recientes, ni siquiera necesita una matriz para f:selectItems, cualquier Iterable funcionará. Por lo tanto:

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

Para obtener más información sobre la construcción de recogida en el Ver la EL 3.0 Specification - final release, 2.2 Construcción de colección Objetos.

0

Estoy usando ArrayUtils de apache para hacer esto. primero, registre la clase ArrayUtils como un frijol para que pueda acceder a ella desde 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> 

a continuación, puede llamar a los métodos ArrayUtils':

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

el código anterior no funcionará si no se puede acceder al EMPTY_INT_ARRAY constante. Para esto, utilicé el componente primefaces p: importConstants, no estoy seguro si se puede hacer en JSF simple.

así es como lo uso:

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