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

时间:2013-02-01 16:15:05

标签: java jsp session struts2 ognl

是否可以使用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上保存的对象,就好像{ {1}}对象是我行动的属性。例如,给定前面的代码段,PROCESS_CONFIGPROCESSNAME对象的属性,我想在PROCESS_CONFIG对象中自动更新它而不是PROCESS_CONFIG属性我的行动,然后必须明确地对我的PROCESSNAME进行设置 PROCESSNAME对象。

1 个答案:

答案 0 :(得分:1)

S2中的会话是一个映射,您可以在使用JSP中的OGNL之前放置属性。要解决此问题,请让您的操作实施SessionAware并查看官方site以获取说明和用法,并阅读常见问题解答中的How do we access to the session

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