Cómo acceder a objetos en lenguaje de expresiones EL $ $}

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; } 

Ver también:

  • Nuestra página wiki de EL
  • ¿Cómo funcionan los servlets? Instanciación, sesiones, variables compartidas y multihilo
  • ¿Cómo evitar el código de Java en los archivos JSP?
  • Mostrar JDBC ResultSet en HTML en la página JSP usando el patrón MVC y DAO
  • Utilice EL $ {XY} directamente en scriptlet <% XY%>
  • ¿Cómo resuelve el lenguaje de expresiones Java los atributos booleanos? (en JSF 1.2)
  ${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}