【问题标题】:ErrorBinding Spring portlet MVCErrorBinding Spring portlet MVC
【发布时间】:2014-02-11 08:45:37
【问题描述】:

免责声明:我希望在开始使用该框架之前能够彻底了解。 但就目前而言,我在这方面欠缺,因此问题就来了。

我正在使用 Spring-Portlet MVC。

我有一个流程,我在屏幕上接受输入,验证输入,根据其结果呈现同一屏幕或下一个屏幕。

实现细节:

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

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

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

问题:

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

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

问候,

马维亚

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

【问题讨论】:

    标签: spring-mvc spring-portlet-mvc


    【解决方案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;
    }
    

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

    @RenderMapping
    public String showAddressPage(ModelMap modelMap){
       Address address = modelMap.get("address");
    
       //make any additional changes to address
    
    }
    

    我用这个例子作为参考article

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2017-01-30
      • 1970-01-01
      相关资源
      最近更新 更多