Spring MVC - 命令对象绑定问题

时间:2010-10-17 23:10:15

标签: forms spring-mvc

我正在使用域对象作为Web层中的命令对象。在一种情况下,此命令对象支持表示域对象的部分更新的表单。

@RequestMapping( value = "/club/edit", method = RequestMethod.GET )
public String setupEditClubForm( ModelMap model, @RequestParam( "clubId" ) Long clubId ) {
    Club club = clubService.findClubById( clubId );
    model.addAttribute( "club", club );
    model.addAttribute( "action", "edit" );
    return "clubForm";
}

@RequestMapping( value = "/club/edit", method = RequestMethod.POST )
public String processEditClubForm( ClubEntity club, BindingResult result ) {
    if ( result.hasErrors() ) {
        return "clubForm";
    }
    clubService.updateClub( club );
    return "redirect:/club/" + club.getId();
}

我的问题是域对象有一些字段,通过提交此表单不会更改。这些没有相应请求参数的字段变为空,我需要它们保持不变。

我认为这可以通过将对象放在会话中(通过@SessionAttributes)来解决,以允许它在两个请求之间生效,但它不起作用。

我查看了Spring引用,但是我找不到有关Spring如何操作命令对象的任何信息。

1 个答案:

答案 0 :(得分:2)

嗯,问题很简单 - 我实际上是在processEditClubForm方法中创建一个新的命令对象。这是正确的方法代码:

@RequestMapping( value = "/club/edit", method = RequestMethod.POST )
public String processEditClubForm( @ModelAttribute Club club, BindingResult result ) {
    if ( result.hasErrors() ) {
        return "clubForm";
    }
    clubService.updateClub( club );
    return "redirect:/club/" + club.getId();
}

感谢Daniel让我看到它: - )