如何使用ognl更改会话范围属性?

是否可以使用ognl更改会话范围属性?

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

我尝试了以下但它不起作用:

  

当我提交表单并在我的操作中访问会话对象时,通过ServletActionContext.getRequest().getSession().getAttribute("PROCESS_CONFIG") ,属性name没有改变。

编辑:

在会话中保存为PROCESS_CONFIG的对象是一个非常深的复杂对象(由对其他对象的大量引用组成,包含对象列表),在我的视图中,我只想呈现其属性的一个非常小的子集 (包括来自的属性)它的组成对象)。 因此,将所有其他字段隐藏在我的JSP中是不切实际的! 有问题的视图是一个可以更改这些字段值的表单,我希望直接并自动更新我的struts 2会话上保存的对象PROCESS_CONFIG ,就像PROCESS_CONFIG对象是我的操作的属性一样。 例如,给定前面的代码片段, PROCESSNAMEPROCESS_CONFIG对象的一个​​属性,我想在PROCESS_CONFIG对象中自动更新它,而不是在我的操作上有一个PROCESSNAME属性,然后必须在我的PROCESS_CONFIG对象上显式设置PROCESSNAME

S2中的会话是一个映射,您可以在使用JSP中的OGNL之前放置属性。 要解决这个问题,请让您的操作实现SessionAware并查看官方网站上的说明和用法,并阅读如何从FAQ 访问会话 。

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