Java 如何使用ognl更改会话作用域属性?

Java 如何使用ognl更改会话作用域属性?,java,jsp,session,struts2,ognl,Java,Jsp,Session,Struts2,Ognl,是否可以使用ognl更改会话作用域属性 例如,如果我在会话中有一个名为PROCESS\u CONFIG的属性,它是一个具有属性name的对象,那么如何在JSP上更改该属性name 我尝试了以下方法,但无效: <s:textfield value="%{#session.PROCESS_CONFIG.name}" id="PROCESSNAME" name="#session.PROCESS_CONFIG.name"/> 当我提交表单并通过ServletActionContex

是否可以使用
ognl
更改会话作用域属性

例如,如果我在会话中有一个名为
PROCESS\u CONFIG
的属性,它是一个具有属性
name
的对象,那么如何在JSP上更改该属性
name

我尝试了以下方法,但无效:

<s:textfield value="%{#session.PROCESS_CONFIG.name}" id="PROCESSNAME" name="#session.PROCESS_CONFIG.name"/> 

当我提交表单并通过
ServletActionContext.getRequest().getSession().getAttribute(“进程配置”)
访问操作中的会话对象时,属性
名称
没有更改

编辑:

会话中保存为
PROCESS\u CONFIG
的对象是一个非常复杂的对象(由许多对其他对象的引用组成,带有对象列表),在我看来,我只想展示其属性(包括来自其组合对象的属性)的非常小的子集。因此,用所有其他隐藏字段污染我的JSP是不切实际的!所讨论的视图是一种可以更改这些字段值的表单,我希望直接自动更新struts 2会话中保存的对象,就像
PROCESS\u CONFIG
对象是我操作的属性一样。例如,给定前面的代码段,
PROCESSNAME
PROCESS\u CONFIG
对象的一个属性,我想在
PROCESS\u CONFIG
对象中自动更新它,而不是在我的操作中使用
PROCESSNAME
属性,然后在我的操作中显式地设置
PROCESSNAME

PROCESS\u CONFIG
对象

S2中的会话是一个映射,在JSP中将属性与OGNL一起使用之前,可以在其中放置属性。为了解决这个问题,让您的操作实现
SessionAware
,查看官方的描述和用法,并阅读常见问题解答


对于您的问题:为什么不在JSP中获取属性。因为您正在使用S2和OGNL(通过
#session
reference)获取它,并且您没有将该属性添加到S2 session。S2会话实现不同于标准http会话。但是,如果您将属性设置为标准http会话,您仍然可以以JSP 2.0的方式访问它。反之亦然。

S2中的会话是一个映射,在JSP中将属性与OGNL一起使用之前,可以在其中放置属性。为了解决这个问题,让您的操作实现
SessionAware
,查看官方的描述和用法,并阅读常见问题解答


对于您的问题:为什么不在JSP中获取属性。因为您正在使用S2和OGNL(通过
#session
reference)获取它,并且您没有将该属性添加到S2 session。S2会话实现不同于标准http会话。但是,如果您将属性设置为标准http会话,您仍然可以以JSP 2.0的方式访问它。反之亦然。

无论您是否可以,我不确定您是否应该将视图层用于视图内容,Java端用于逻辑。用例是什么?同意Dave的观点,我很好奇您的需求,这导致您需要从jsp执行此操作?不管这是一个好主意,最明显的尝试是使用等号的赋值,顺便说一句。如果您想要一个非常明显的示例,请参阅:并在页面中搜索工作“赋值”如果你想在地图上找到一个新的值,也应该在地图上找到。好的建议是从上到下阅读整个页面,然后遵循最佳实践,只使用属性查找和使用OGNL计算布尔语句。感谢您的回复。我已经编辑了我的帖子,我希望它能澄清我的问题。基本上,我的想法是避免在从属性获取属性并将其设置为struts 2会话范围对象的操作中进行管道设置。@这并没有真正解释为什么要在视图层中执行此操作,不过:从会话中呈现对象与设置会话值无关。无论您是否可以,我不确定您是否应该将视图层用于视图内容,Java端用于逻辑。用例是什么?同意Dave的观点,我很好奇您的需求,这导致您需要从jsp执行此操作?不管这是一个好主意,最明显的尝试是使用等号的赋值,顺便说一句。如果您想要一个非常明显的示例,请参阅:并在页面中搜索工作“赋值”如果你想在地图上找到一个新的值,也应该在地图上找到。好的建议是从上到下阅读整个页面,然后遵循最佳实践,只使用属性查找和使用OGNL计算布尔语句。感谢您的回复。我已经编辑了我的帖子,我希望它能澄清我的问题。基本上,我的想法是避免在从属性中获取属性,然后将它们设置为struts 2会话范围对象的操作中进行管道操作。@这并没有真正解释为什么要在视图层中执行此操作,但是:从会话中呈现对象与设置会话值无关。