Spring mvc ErrorBinding Spring portlet MVC

Spring mvc ErrorBinding Spring portlet MVC,spring-mvc,spring-portlet-mvc,Spring Mvc,Spring Portlet Mvc,免责声明:我希望在开始使用框架之前有一个完整的理解。 但就目前而言,我缺乏这方面的知识,因此我提出了这个问题 我正在使用SpringPortletMVC 我有一个流程,在这个流程中,我在屏幕上获取一个输入,验证输入,根据其结果,它要么呈现相同的屏幕,要么呈现下一个屏幕 实施细节: 我有一个动作方法,它采用表单支持的命令对象。它检查输入的输入是否有效。如果无效,它将在BindingResult实例中填充错误消息,并将其作为另一个参数 我们有不同的渲染方法,渲染不同的屏幕 我将命令对象作为这些渲染方

免责声明:我希望在开始使用框架之前有一个完整的理解。 但就目前而言,我缺乏这方面的知识,因此我提出了这个问题

我正在使用SpringPortletMVC

我有一个流程,在这个流程中,我在屏幕上获取一个输入,验证输入,根据其结果,它要么呈现相同的屏幕,要么呈现下一个屏幕

实施细节:

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

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

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

问题:

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

如果有人对SpringPortletMVC有更好的理解,请解释一下这种行为,或者告诉我在哪些方面缺乏理解

问候,

马维亚


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

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

@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

}
我用这个例子作为参考