SpringMVC:BindingResult声明时没有前面的模型属性

SpringMVC:BindingResult声明时没有前面的模型属性,spring,spring-mvc,Spring,Spring Mvc,我在Spring MVC 3.1.0.M2中遇到了一个非常奇怪的行为,它突然弹出: @Controller @RequestMapping("/admin/participants/{participantId}") public class ParticipantEditController extends ParticipantControllerSupport { @ModelAttribute("participant") public Participant getPa

我在Spring MVC 3.1.0.M2中遇到了一个非常奇怪的行为,它突然弹出:

@Controller
@RequestMapping("/admin/participants/{participantId}")
public class ParticipantEditController extends ParticipantControllerSupport {
    @ModelAttribute("participant")
    public Participant getParticipant(
        @PathVariable("participantId") final long participantId) {
        // ...
    }

    @RequestMapping(value = "/{tab}/edit", method = RequestMethod.PUT)
    public ModelAndView save(
        @ModelAttribute("participant") final Participant participant,
        final BindingResult errors) {
        // ...
    }
}
当我提交表格时,会出现以下异常:

java.lang.IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Check your handler method signature!
    at org.springframework.web.method.annotation.support.ErrorsMethodArgumentResolver.resolveArgument(ErrorsMethodArgumentResolver.java:60)
    at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:65)
    ...
让我烦恼的是,我的
BindingResult
没有立即跟随方法签名中的model属性

我尝试过使用和不使用
@Valid
注释以及或多或少的其他参数,但都没有效果


有人知道我做错了什么吗?非常感谢您的帮助。

我希望这不是正确答案。尽量不要将参数声明为final。前


我发现了问题所在。罪魁祸首是父类中的另一个方法,该方法使用“
@modeldattribute
计算另一个模型属性:

@ModelAttribute("foobar")
public String getFoobar(@ModelAttribute("participant") Participant participant) {
    ...
}

我可以很高兴地确认这不是正确的答案。:-)这可能是ErrorsMethodArgumentResolver(或相关类)中的错误。考虑把它报告给Spring团队。3.1.0.M2仍然是开发版本;获取3.0.6(最新的ga版本)并查看是否可以重现错误可能是个好主意。我已将此主题提交给Spring社区论坛:
@ModelAttribute("foobar")
public String getFoobar(@ModelAttribute("participant") Participant participant) {
    ...
}