2011-09-22 86 views
0

我遇到了Spring MVC的3.1.0.M2一個非常奇特的行爲突然蹦出來:Spring MVC的:BindingResult前沒有模型涉嫌聲明的屬性

@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確實緊跟在方法簽名的模型屬性。

我試過了,沒有使用@Valid註解,並且或多或少的其他參數都無濟於事。

有誰知道我在做什麼錯?任何幫助不勝感激。

+0

這可能是在ErrorsMethodArgumentResolver(或相關型號類)的一個錯誤。考慮將其報告給春季團隊。 3.1.0.M2仍然是一個開發版本;獲得3.0.6(最新的ga版本)可能是一個好主意,並查看是否可以重現該錯誤。 – DwB

+0

我已將此主題提交到Spring社區論壇:http://forum.springsource.org/showthread.php?115054-MVC-3.1.0.M2-BindingResult-allegedly-declared-without-preceding-model-attribute –

回答

1

我發現了這個問題。罪魁禍首是在父類中的另一方法,該方法中使用的「@ModelAttribute來計算另一個模型屬性:

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

我希望這不是正確的答案。儘量不要聲明你的參數是最終的。 ex。

public ModelAndView save(
    @ModelAttribute("participant") Participant participant, 
    BindingResult errors) 
+1

我可以高興地確認這不是正確的答案。 :-) –