1

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

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

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

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

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

编辑:

保存在 session as 中的对象PROCESS_CONFIG是一个非常复杂的对象(由对其他对象的大量引用组成,带有对象列表),在我看来,我只想展示其属性的一个非常小的子集(包括其属性组合对象)。所以,用隐藏的所有其他字段污染我的 JSP 是不切实际的!有问题的视图是一种可以更改这些字段的值的表单,我想直接自动更新保存在我的 struts 2 会话中的对象PROCESS_CONFIG,就好像PROCESS_CONFIG对象是我的操作的属性一样。例如,给定前面的代码片段,PROCESSNAMEPROCESS_CONFIGobject 的一个属性,我想在PROCESS_CONFIGobject 中自动更新它而不是 PROCESSNAME属性,然后必须明确地PROCESSNAME对我的 PROCESS_CONFIG对象进行设置。

4

1 回答 1

1

S2 中的会话是一个映射,您可以在将其与 JSP 中的 OGNL 一起使用之前放置属性。要解决此问题,让您的操作实施SessionAware并查看官方网站的描述和用法,并阅读我们如何从常见问题解答中访问会话。

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

于 2013-02-01T17:18:10.347 回答