2012-05-19 14 views
5

¿cómo puedo pasar una lista a un componente JSF en EL sin un backingbean? O, en otras palabras, ¿cómo puedo declarar e inicializar una lista/matriz en JSF sin un bean?Pasar una lista a un componente JSF sin usar un bean

Ejemplo:

caller.xhtml

/* Call a JSF-Component */ 
<mycomp:displayList value="HERE I WANT TO PASS A LIST WITHOUT A BACKINGBEAN"/> 

displayList.xhtml

/* MY Component */ 
<composite:interface> 
    <composite:attribute name="value" type="java.util.list" /> 
</composite:interface> 

¿Hay alguna posibilidad de pasar una lista/Colección cual no está declarado en un Bean a un JSF ¿componente?

Respuesta

5

Aunque no existe una lista literal en EL, se puede declarar una lista sin necesidad de un grano de contenerlo declarando una en faces-config.xml:

<managed-bean> 
    <managed-bean-name>someList</managed-bean-name> 
    <managed-bean-class>java.util.ArrayList</managed-bean-class> 
    <managed-bean-scope>request</managed-bean-scope> 
    <list-entries> 
     <value>One</value> 
     <value>Two</value> 
     <value>Three</value> 
    </list-entries> 
</managed-bean> 

También se puede utilizar un tipo de utilidad para crear una lista:

import java.util.*; import javax.faces.bean.*; 

@ManagedBean @NoneScoped 
public class Lister<T> extends AbstractList<T> { 
    private List<T> list = new ArrayList<T>(); 

    public Lister plus(T t) { 
    list.add(t); 
    return this; 
    } 

    @Override public T get(int index) { 
    return list.get(index); 
    } 

    @Override public int size() { 
    return list.size(); 
    } 

    @Override public String toString() { 
    return list.toString(); 
    } 
} 

Esto se puede utilizar con una expresión como #{lister.plus('one').plus('two').plus('three')}

+0

La solución con el tipo de utilidad es genial. Muchas gracias. –

2

Si su pregunta significa algo así como "¿hay una lista literal en EL?", Entonces la respuesta es "no hay ninguna".

Si desea crear una lista y no utilizar beans de respaldo JSF, la respuesta es: "use beans CDI o Spring beans".

Si simplemente no te gusta tener clases de modelo en tus proyectos de Java, entonces puedes crear y registrar fácilmente una resolución EL que creará una nueva lista cuando se use un nombre específico.

De cualquier manera, es probable que esté cometiendo un gran error o malinterprete algo importante. Tal vez deberías haber hecho una pregunta diferente.

+1

Quizás no me haya aclarado. Pero "¿hay una lista literal en EL" es bastante que lo que quiero preguntar :-) –

2

colección construcción es posible con EL 3.0.

Set:

{1, 2, 3} 

lista:

[1, "two", [foo, bar]] 

Mapa:

{"one":1, "two":2, "three":3} 

Ejemplo del uso de la construcción de la colección EL con JSF:

<h:dataTable value="#{[1, 2, 3]}" var="v"> 
    <h:column>#{v}</h:column> 
</h:dataTable> 

Consulte el EL 3.0 Specification - final release, 2.2 Construcción de objetos de colección.

Cuestiones relacionadas