java - Spring MVC @SessionAttributes 困惑!

标签 java spring-mvc session

我正在使用 2.5 并通过注释完成所有操作。

我有一个允许用户编辑对象的简单表单。它背后的 Controller 创建对象并在 GET 时将其添加到模型中,并在 POST(提交)时处理更改。它工作正常,但我不明白为什么。该对象永远不会显式添加到 session 中,并且该对象的“id”不会传递给提交方法。 Controller 的提交方法如何知道对象的“id”值?

出现这个问题的原因是我有另一个几乎与上面的相同的表单/ Controller ,但除非我将对象添加到@SessionAttributes,否则它不会“工作”。区别在于这个特定 Controller 使用的对象引用了另一个延迟加载的对象(我在幕后使用 Hibernate)。当我在没有将父对象放入 SessionAttributes 的情况下提交表单时,我会收到 DataIntegrityViolationException,因为我从未加载引用的对象。

当我将父对象添加到@SessionAttributes 时,问题神奇地消失了。我说神奇是因为即使我将父对象放入 GET session 中,我仍然从未显式加载引用对象,因此它应该为 null(或空代理或发生的任何情况)。

世界上发生了什么事?我需要一些帮助!

最佳答案

对象很可能在提交阶段重新创建。该 ID 可能“存储”在隐藏的表单字段中。

你应该小心 session 属性,我总是尽量避免它,除非我有很好的理由。与 Hibernate 结合使用时,它会产生各种令人头疼的问题。

如果必须,请使用完全初始化的副本。

关于java - Spring MVC @SessionAttributes 困惑!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/830017/

相关文章:

java - 使用扫描仪循环从控制台读取

java - 将当前日期转换为下一个 View 的方法

spring-mvc - Spring JNDI 查找 - 无法将 com.sun.proxy.$Proxy 转换为 EJB 类

c++ token 模拟以从服务修改HKEY_CURRENT_USERS

c# - 在单独的帮助程序类中访问 Controller 外部的 HttpContext session 的最佳实践

java - 如何在 Java 中获取 URL 对象内路径的父级?

jquery - 在 spring 中上传文件并使用 ajax 捕获响应时出错

spring - 如何为 Spring REST MVC 应用程序定义包结构?

php - 在 session 中保存数据库行 ID 以备后用

java - For 循环和 LinkedList 的索引错误