Cómo llamar al método parametrizado desde JSP usando JSTL / EL

Cómo llamar a un método Java con argumentos definidos en la clase Java, desde JSP utilizando JSTL / EL. El método es devolver matrices. Se puede usar cualquier valor de retorno.

Solo puede invocar métodos con argumentos en EL si está orientando y ejecutando un contenedor compatible con Servlet 3.0 (por ejemplo, Tomcat 7, Glassfish 3, JBoss AS 6, etc.) con un servidor web.xml declarado conformado Servlet 3.0. Esta versión de servlet viene con EL 2.2 que permite invocar métodos de instancia arbitrarios con argumentos.

Suponiendo que tiene un ${bean} en el scope que se refiere a una instancia de una clase que tiene un método parecido a public Object[] getArray(String key) , entonces debería poder hacer esto:

  ${item} 

o incluso con otra variable como argumento

  ${item} 

Pero si no se dirige a un contenedor Servlet 3.0, entonces no puede invocar métodos con argumentos en EL. Su mejor opción es hacer el trabajo en el servlet de preprocesamiento como lo sugiere Duffymo.

 Object[] array = bean.getArray("foo"); request.setAttribute("array", array); // ... 

Como una alternativa completamente diferente, puede crear una función EL que delegue la llamada al método. Puede encontrar un ejemplo de inicio cerca de la parte inferior de este blog . Te gustaría terminar algo así como:

  ${item} 

con

 public static Object[] getArray(Bean bean, String key) { return bean.getArray(key); } 

La solución anterior no funcionó para mí. Tenía una función getRemitanceProfileInformation(user) en mi clase java. Creé un usebean de la clase Java y luego invoqué

  

Y funcionó.

Proporcione al JSP una referencia a una instancia de la clase que tiene el método y llámelo.

Probablemente estés preguntando quién le da esa instancia al JSP, es un servlet en el arreglo MVC modelo-2.

Así es como funcionará el flujo:

  1. Envíe una solicitud GET / POST desde un JSP a un servlet.
  2. Servlet actúa sobre esa solicitud y hace algo de trabajo en nombre del JSP. Pone todos los objetos necesarios en solicitud, sesión u otro scope apropiado.
  3. El servlet enruta la respuesta al siguiente JSP, que podría ser el mismo que el JSP solicitante.
  4. Enjuague, repita.

Si está utilizando JSF, puede usar un acto de bean como modelo en View Scope, y cargar desde el origen de datos de forma automática. Y si usa JSP, ¿qué le parece usar la etiqueta TLD? Y usando la etiqueta JSTL ? ¿Guarda la memoria de guardar en la sesión, o la guarda en sesión y la elimina cuando se completa el evento de carga? De alguna manera como esto (JSTL + TLD)

  Product name: ${p.productName}