2011-08-19 40 views

Respuesta

2

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

Probablemente se pregunte quién le da esa instancia al JSP; es un servlet en el arreglo MVC modelo-2.

Así es como el flujo funcionará:

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

Si está utilizando JSF, puede utilizar un acto de frijol como modelo en Ver ámbito, y la carga de la fuente de datos automática. Y si usa JSP, ¿qué le parece usar la etiqueta de TLD? ¿Y usando la etiqueta JSTL <c:foreach>? ¿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)

<c:forEach items="${myTag:getProductByPage(page)}" var="p"> 
    Product name: ${p.productName} 
</c:forEach> 
+0

Estoy usando struts tiles. Podría por favor enviar su explicación, más sobre necesitamos llamar a un método que acepte un parámetro, aquí serán los valores ollean establecidos en JSP. –

55

Sólo puede invocar métodos con argumentos en El si usted se está dirigiendo y ejecutando un Servlet 3.0 contenedor compatible (por ejemplo Tomcat 7, Glassfish 3, JBoss AS 6, etc.) con un 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.

Asumiendo que usted tiene una ${bean} en el ámbito que se refiere a una instancia de una clase que tiene un método algo así como public Object[] getArray(String key), entonces usted debería ser capaz de hacer esto:

<c:forEach items="${bean.getArray('foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

o incluso con otro variable como argumento

<c:forEach items="${bean.getArray(foo)}" var="item"> 
    ${item} <br /> 
</c:forEach> 

Pero si no dirigirse a un contenedor de Servlet 3.0, entonces no se puede llamar a los métodos con argumentos en EL en absoluto. 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 kickoff en algún lugar cerca de la parte inferior de this blog. Desea llegar a algo como como:

<c:forEach items="${util:getArray(bean, 'foo')}" var="item"> 
    ${item} <br /> 
</c:forEach> 

con

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

Estoy haciendo algo similar con el objeto de solicitud, invocando 'isUserInRole ('role')' pero eclipse piensa que este es un método get y se queja sobre el método 'getIsUserInRole()' no existente. ¿Sabes cómo se puede arreglar esto? Estoy usando glassfish v3. Gracias, D. – Daniel

+2

@ Daniel: Eclipse es débil en cuanto a la verificación y validación de la sintaxis EL. Simplemente desactive la validación de EL en Eclipse, o instale JBoss Tools. – BalusC

+0

Gracias. Lo deshabilité y funcionó. – Daniel

4

La anterior solución de trabajo aún no ha para mí. Tenía una función getRemitanceProfileInformation(user) en mi clase Java. creé una useBean de clase java y luego se invoca

<c:set var="paymentValueCode" value='remittanceaddr.getRemitanceProfileInformation("${user}")'/> 

y funcionó.

+3

Referencia incorrecta, quién sabe cuál fue la solución * anterior * cuando respondió. – madth3

Cuestiones relacionadas