【问题标题】:How to change session scope properties using ognl?如何使用 ognl 更改会话范围属性?
【发布时间】: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,PROCESSNAMEPROCESS_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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-16
    • 2023-03-04
    • 2011-09-02
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    相关资源
    最近更新 更多