【问题标题】:Spring MVC 3.1 - Model Attribute lostSpring MVC 3.1 - 模型属性丢失
【发布时间】:2013-01-03 16:17:31
【问题描述】:

我有一个关于 ModelAttributes 范围的快速问题。

开发。环境:Spring MVC 3.1/Java 6/JSP w/JSTL 用于视图

在我的控制器中,我通过向模型添加一个属性

model.addAttribute(“appForResubmission”, appForResubmission);

在 JSP(为响应 GET 请求而提供服务)中,我将其内容读取为:

${appForResubmission.appId} 

——工作正常,数据按预期显示在 JSP 上。

在提交 JSP 后,在同一个控制器中以不同的方法(响应 PUT 请求),我尝试从模型中读取属性以进行任何更改,我正在这样做

@ModelAttribute(“appForResubmission”) Application app

在方法签名中。

但是,当我尝试向对象询问数据时,我得到的只是一个新的 Application 对象。 Spring 的文档说,当模型中不存在请求的属性时,就会发生这种新对象的实例化。

什么会导致属性丢失?有任何想法吗?我怀疑这是某个地方的范围问题,但我不确定问题可能出在哪里。

非常感谢您提供的任何指针?

谢谢你, M.雷迪

【问题讨论】:

    标签: spring-mvc modelattribute


    【解决方案1】:

    modelattribute 的作用域是request,在内部它就相当于HttpSerletRequest.setAttribute("model", model)

    如果您希望模型在不同的控制器中可用,您可能有两种选择,一种是根据您提交给控制器的内容或使用持久源来重建它。第二个选项是使用@SessionAttribute({'modelname'}) 将特定模型属性添加到会话中,但请注意您必须稍后调用SessionStatus.complete 才能删除添加到会话中的模型。

    【讨论】:

    • 感谢您的回复。就我而言,我只使用一个控制器。我使用的两种方法都映射到同一个 URL,除了一种方法响应 GET,另一种方法响应 POST。我在 GET 中添加了一个模型属性,然后在从 JSP(通过 POST)返回时,我试图检索相同的属性。
    • 是的,但是您在 JSP 中是否有字段来保存您的 Application 对象的所有字段,并且您是否将所有这些字段提交回处理您的 PUT 的方法,如果没有的话那么它们在处理PUT的方法中将不可用。
    • 是的,我在 JSP 中有字段...。但并非所有字段都显示在 JSP 上。
    猜你喜欢
    • 2011-11-25
    • 2013-10-09
    • 1970-01-01
    • 2013-06-01
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    相关资源
    最近更新 更多