如何在 Struts 2 中使用 OGNL 更改会话范围变量的属性值?

问题描述 投票:0回答:1
是否可以使用 OGNL 更改会话范围变量的属性值?

例如,如果我的会话中有一个名为

PROCESS_CONFIG

 的属性,它是一个具有属性 
name
 的对象,我如何在 JSP 中更改此属性 
name

我尝试了以下方法,但没有成功:

<s:textfield value="%{#session.PROCESS_CONFIG.name}" id="PROCESSNAME" name="#session.PROCESS_CONFIG.name"/>
当我提交表单并在操作中访问会话对象时,通过

ServletActionContext.getRequest().getSession().getAttribute("PROCESS_CONFIG")`
属性

name

没有改变。

编辑:

在会话中保存为

PROCESS_CONFIG

 的对象是一个非常深、复杂的对象(由对其他对象的大量引用组成,并带有对象列表的列表),在我看来,我只想呈现一个
非常小的子集它的属性(包括来自其组合对象的属性)。因此,用隐藏的所有其他字段来污染我的 JSP 是不切实际的!

问题中的视图是一个表单,我可以在其中更改这些字段的值,并且我想

直接自动更新保存在我的Struts 2会话中的对象,PROCESS_CONFIG

,就好像
PROCESS_CONFIG
对象是我的行为的财产。例如,给定前面的代码片段, 
PROCESSNAME
PROCESS_CONFIG
 对象的属性,我想将其自动更新为 
PROCESS_CONFIG
 对象,而不是在我的操作中拥有 
PROCESSNAME
 属性,然后让通过在我的中设置
PROCESSNAME
来明确地做到这一点
PROCESS_CONFIG
 物体。

java session struts2 ognl object-property
1个回答
1
投票
S2 中的会话是一个映射,您可以在 JSP 中使用 OGNL 之前将属性放入其中。要解决此问题,请让您的操作实施

SessionAware

 并查看官方 
站点 了解说明和用法,并阅读常见问题解答中的我们如何访问会话

对于你的问题:为什么你没有在JSP中获取该属性。因为您正在使用 S2 和 OGNL 来获取它(通过

#session

 参考)并且您没有将该属性放入 S2 会话。 S2 会话实现与标准 http 会话不同。但是,如果您将属性设置为标准 http 会话,您仍然可以以 JSP 2.0 方式访问它。  反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.