2014-02-11 94 views
0

声明:我希望在开始使用框架之前了解了一下。但是就目前而言,我缺乏这一方面,因此也就是问题所在。ErrorBinding Spring portlet MVC

我正在使用Spring-Portlet MVC。

我有一个流程,其中我在屏幕上进行输入,验证输入,根据其结果,呈现相同的屏幕或下一个屏幕。

实现细节:

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

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

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

问题:

虽然重新描绘的屏幕弹簧-MVC应绑定填充在操作方法的错误消息。目前,当我将命令对象作为render方法中的参数时,spring-mvc以某种方式无法绑定该错误消息。但是有趣的是,如果我不在render方法中将命令对象作为参数,而是在那里创建一个新的命令对象,它就能够绑定错误消息。

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

问候,

Mawia

编辑:只是为了充实以下答案:虽然我没有完全隔离这是造成上述现象的问题,但我遇到了我的要求是使用的ModelAttribute方式。 ModelAttribute可用于方法或方法的参数。它确保模型将可用于所有的调用,直到渲染视图(这是我的理解!)。因此,我们不需要将命令对象作为Render方法中的参数,只需使用ModelAttribute在action方法中注释commandObject参数,然后就可以从下面的答案中建议的模型返回同一个对象。

回答

1

我不认为命令/模型对象应该是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; 
} 

如果我仍然需要从渲染方法访问的ModelAttribute /命令对象,我通常通过获得它:

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

    //make any additional changes to address 

} 

我用这个例子作为参考article