例如,如果我的会话中有一个名为
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
物体。
SessionAware
并查看官方站点 了解说明和用法,并阅读常见问题解答中的我们如何访问会话。 对于你的问题:为什么你没有在JSP中获取该属性。因为您正在使用 S2 和 OGNL 来获取它(通过
#session
参考)并且您没有将该属性放入 S2 会话。 S2 会话实现与标准 http 会话不同。但是,如果您将属性设置为标准 http 会话,您仍然可以以 JSP 2.0 方式访问它。 反之亦然。