0

免责声明:我希望在开始使用该框架之前有一个全面的了解。但就目前而言,我在这方面缺乏,因此是这个问题。

我正在使用 Spring-Portlet MVC。

我有一个流程,我在屏幕上输入一个输入,验证输入,这取决于它的结果,它要么呈现同一个屏幕,要么呈现下一个屏幕。

实施细节:

我有一个动作方法,它采用支持命令对象的形式。它检查输入的输入是否有效。如果它无效,它会在它作为另一个参数的 BindingResult 实例中填充错误消息。

我们有不同的渲染方法,来渲染不同的屏幕。

我在这些渲染方法中将命令对象作为参数。我收到的这个命令对象与传递给操作的命令对象相同。

问题:

在重新渲染屏幕时,spring-mvc 应该绑定在 action 方法中填充的错误消息。目前,当我在渲染方法中将命令对象作为参数时,spring-mvc 无法绑定该错误消息。但有趣的是,如果我不将命令对象作为渲染方法中的参数,而是在那里完全创建一个新的命令对象,它能够绑定错误消息。

可以,对spring-portlet mvc有更好理解的人请解释一下这种行为,或者告诉我哪里缺乏理解。

问候,

马维亚

编辑:只是为了丰富以下答案:虽然我没有完全隔离导致上述行为的问题,但我满足我的要求的方式是使用模型属性。ModelAttribute 可以用于方法或方法的参数。它确保模型将可用于所有调用,直到视图呈现(这是我的理解!)。因此,我们不需要在 Render 方法中将 command 对象作为参数,只需在 action 方法中使用 ModelAttribute 注释 commandObject 参数,然后您就可以按照以下答案中的建议从模型返回相同的对象。

4

1 回答 1

1

我不认为命令/模型对象应该是渲染方法中的参数/参数。当命令/模型被定义为渲染方法签名中的参数时,我在尝试获取验证错误消息时遇到了同样的问题。我通常在单独的方法中创建/填充命令/对象,如下所示:

@ModelAttribute(value="address")
public Address getAddress(@RequestParam Integer id){
    Address address = null;
    if(id != null){
        address = myService.getAddress(id);

    }else{
        address = new Address();
    }
    return address;
}

如果我仍然需要从 render 方法访问 ModelAttribute/command 对象,我通常通过以下方式获取它:

@RenderMapping
public String showAddressPage(ModelMap modelMap){
   Address address = modelMap.get("address");

   //make any additional changes to address

}

我将此示例用作参考文章

于 2014-02-11T13:17:16.573 回答