Si tengo un
ArrayList persons
¿Cómo puedo acceder a él en EL?
${person.title}
La expresión ${foo}
utiliza entre bastidores JspContext#findAttribute()
que busca atributos en PageContext
, HttpServletRequest
, HttpSession
y ServletContext
en este orden por su getAttribute("foo")
mediante el cual foo
de ${foo}
representa así el atributo nombre "foo"
y devuelve el primer objeto no nulo .
Entonces, si lo haces en un servlet
ArrayList persons = getItSomehow(); request.setAttribute("persons", persons); // It's now available by ${persons} request.getRequestDispatcher("/WEB-INF/persons.jsp").forward(request, response);
Y llame a este servlet por URL, luego podrá iterar sobre él en page.jsp
siguiente manera:
${person.title}
Lo anterior también es igualmente válido cuando lo coloca en el ámbito de la sesión
request.getSession().setAttribute("persons", persons);
o incluso en el scope de la aplicación
getServletContext().setAttribute("persons", persons);
EL will para title
en ${person.title}
busca implícitamente un método de instancia pública (¡no estática!) Con el prefijo get
in Person
class como se muestra a continuación:
public String getTitle() { return title; }
El title
campo no necesariamente debe existir en la clase (por lo que puede incluso devolver una cadena codificada y seguir usando ${person.title}
), y no necesariamente tiene que ser un campo de instancia (por lo que también puede ser un campo estático, siempre que el método getter en sí mismo no sea estático).
Solo los getters boolean
(¡no Boolean
!) Tienen un tratamiento especial; EL buscará implícitamente un método público con prefijo is
. Por ejemplo, por ${person.awesome}
:
public boolean isAwesome() { return awesome; }
${item.title}
names
deben estar en el conjunto como atributo disponible para la vista
Si está utilizando Servlets o clase de acción para crear su lista y luego reenviarla a su JSP, entonces debe tener la siguiente línea en su servlet o clase de acción.
ArrayList names = "get from somewhere"; request.setAttribute("personNames",names); ${item.title}