【发布时间】:2013-01-17 00:19:13
【问题描述】:
是否可以使用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对象是我行为的属性。例如,给定前面的代码 sn-p,PROCESSNAME 是 PROCESS_CONFIG 对象的属性,我想在 PROCESS_CONFIG 对象中自动更新它,而不是在我的操作中使用 PROCESSNAME 属性,然后必须在我的身上明确地设置PROCESSNAME
PROCESS_CONFIG 对象。
【问题讨论】:
-
不管你能不能,我不确定你应该——视图层用于视图的东西,Java 端用于逻辑。用例是什么?
-
同意 Dave,我很好奇您的要求导致您需要从 jsp 执行此操作?
-
不管这是一个好主意,显而易见的尝试是使用等号赋值,顺便说一句。如果您想要一个非常明显的示例,请参阅:commons.apache.org/ognl/language-guide.html 并在页面中搜索工作“分配”,如果您想要在地图中添加新值,也应该在那里解决。好的建议是从上到下阅读整个页面,然后遵循最佳实践,仅使用属性查找和使用 OGNL 评估布尔语句。
-
感谢您的回复。我已经编辑了我的帖子,希望它能澄清我的问题。基本上,我的想法是避免在从属性获取属性然后将它们设置到我的 struts 2 会话范围对象的操作中进行管道操作。
-
@theeDude 这并不能真正解释为什么要在视图层执行此操作:presenting 来自会话的对象与 setting 无关 会话值。
标签: java jsp session struts2 ognl