Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/07/2009, 10:51
Avatar de Jawar
Jawar
 
Fecha de Ingreso: octubre-2005
Ubicación: Málaga
Mensajes: 34
Antigüedad: 18 años, 8 meses
Puntos: 0
Respuesta: Duda ValueStack en Struts 2

Para quien le pueda interesar, creo que he dado con la respuesta. El listado anterior no es la estructura del ValueStack sino el orden de búsqueda seguido para resolver una expresión OGNL. Eso sí, los puntos 1,2 y 3 suele ser la estructura del ValueStack, pero el punto 4 no, ya que los named object (#session, #request o los creados por el desarrollador) se almacenan en el ActionContext.

El ActionContext contiene lo siguientes elementos:
-ValueStack
- #session
- #params
- # application
- # attr
- # request

Si por ejemplo hacemos <s:set var="var1" scope="action"/>, var1 se almacenará en el ActionContext como #var1.
Si ejecutamos las dos lineas siguientes:
Código PHP:
<s:set var="var1" scope="action"/>
<
s:property value="var1" /> 
La expresión value="var1" (que equivale a value="%{var1}"), se resolverá al llegar al punto 4 del orden de búsqueda, ya que se encontrará en el ActionContext con #var1.

Si en nuestro objeto Action tuvíeramos una propiedad como:
Código PHP:
private String var1
entonces al ejecutar las dos líneas anteriores, la expresión value="var1" se resolvería contra la propiedad del Action (se queda pues en el punto 3). Y si quisiéramos evaluar la expresión value="#var1" entonces no le queda más remedio que resolverse en el punto 4.

Por tanto, volviendo a las líneas de código del mensaje principal:
Código PHP:
<s:set name="omega" value="username" scope="request"/>
<
s:property value="%{omega}" /> 
la expresión value="%{omega}" no se resuelve ya que no encuentra ninguna propiedad que concuerde en los puntos 1,2 y 3 (ValueStack) , ni tampoco un named object llamado #omega en el punto 4 . La expresión se resolvería si fuera:
value="#request.omega".

Menuda rayada! Y qué de entresijos tiene Struts 2, aunque la idea es simple

Última edición por Jawar; 02/07/2009 a las 10:58