java - son - ¿Cómo cambiar las propiedades del alcance de la sesión usando ognl?
propiedades de netbeans (1)
¿Es posible cambiar las propiedades del alcance de sesión usando ognl
?
Por ejemplo, si tengo en mi sesión un atributo llamado PROCESS_CONFIG
que es un objeto con un name
atributo, ¿cómo se puede cambiar este name
atributo en un JSP?
He intentado lo siguiente, pero no funciona:
<s:textfield value="%{#session.PROCESS_CONFIG.name}" id="PROCESSNAME" name="#session.PROCESS_CONFIG.name"/>
Cuando envío el formulario y ServletActionContext.getRequest().getSession().getAttribute("PROCESS_CONFIG")
objeto de sesión en mi acción, a través de ServletActionContext.getRequest().getSession().getAttribute("PROCESS_CONFIG")
, el name
del atributo no ha cambiado.
EDITAR:
El objeto guardado en la sesión como PROCESS_CONFIG
, es un objeto complejo muy profundo (compuesto por numerosas referencias a otros objetos, con listas de listas de objetos) y en mi opinión solo quiero presentar un subconjunto muy pequeño de sus atributos (incluidos los atributos de sus objetos compuestos). Entonces, ¡contaminar mi JSP con todos los demás campos como ocultos no es práctico! La vista en cuestión es una forma en la que se puede cambiar el valor de esos campos y me gustaría actualizar directa y automáticamente el objeto guardado en mi sesión Struts 2, PROCESS_CONFIG
, como si el objeto PROCESS_CONFIG
fuera una propiedad de mi acción. Por ejemplo, dado el fragmento de código anterior, PROCESSNAME
es un atributo del objeto PROCESS_CONFIG
y me gustaría actualizarlo automáticamente en el objeto PROCESS_CONFIG
en lugar de tener una propiedad PROCESSNAME
en mi acción y luego tener que hacer explícitamente la configuración de PROCESSNAME
en mi objeto PROCESS_CONFIG
.
La sesión en S2 es un mapa donde puede colocar los atributos antes de usarlos con OGNL en el JSP. Para que esto funcione, deje que su acción implemente el SessionAware
y mire el sitio oficial para la descripción y los usos, y lea ¿Cómo accedemos a la sesión desde las Preguntas frecuentes?
A su pregunta: ¿por qué no obtuvo el atributo en JSP. Porque está utilizando S2 y OGNL para obtenerlo (a través de #session
reference) y no puso el atributo en la sesión S2. La implementación de la sesión S2 difiere de la sesión http estándar. Sin embargo, si establece el atributo en la sesión http estándar, puede acceder a ella en modo JSP 2.0. Lo opuesto también es cierto.