Foros del Web » Programación para mayores de 30 ;) » Java »

Duda ValueStack en Struts 2

Estas en el tema de Duda ValueStack en Struts 2 en el foro de Java en Foros del Web. Leyendo lo siguiente: Los objetos que struts2 pública en el valueStack son: 1. Objetos temporarios: son los objetos creados durante la ejecución de un jsp, ...
  #1 (permalink)  
Antiguo 02/07/2009, 04:25
Avatar de Jawar  
Fecha de Ingreso: octubre-2005
Ubicación: Málaga
Mensajes: 34
Antigüedad: 18 años, 7 meses
Puntos: 0
Duda ValueStack en Struts 2

Leyendo lo siguiente:

Los objetos que struts2 pública en el valueStack son:

1. Objetos temporarios: son los objetos creados durante la ejecución de un jsp, por ejemplo, al iterar una colección mediante un tag se crea una referencia al objeto de la iteración actual.
2. El Modelo de Objeto (The model object): Si el action define un modelo de objetos entonces este es publicado en la pila.
3. El Action: El Action que se esta ejecutando.
4. Named Objects: son los objetos que se refieren a los diferentes scopes de servlet (#application, #session, #request, #attr, #parameters).

Es importante conocer el orden, debido a que al querer acceder a uno de estos objetos utilizando OGNL, primero se buscara desde el grupo de menor índice al de mayor índice (como esta enumerado más arriba).



He intentado hacer lo siguiente (sea "username" una propiedad java del Action) :
Código PHP:
<s:set name="omega" value="username" scope="request"/>
<
s:property value="%{omega}" /><br/> 
¿No me debería de encontrar la variable omega si es cierto que sigue ese orden de búsqueda? Yo pensaba que los objetos #application, #session, etc NO estaban dento del ValueStack, sino a la misma altura de este, dentro del ActionContext.

Última edición por Jawar; 02/07/2009 a las 10:54
  #2 (permalink)  
Antiguo 02/07/2009, 10:51
Avatar de Jawar  
Fecha de Ingreso: octubre-2005
Ubicación: Málaga
Mensajes: 34
Antigüedad: 18 años, 7 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
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:49.