如何使用 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 jsp session struts2 ognl
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.