Java 表单验证错误后的Spring MVC(既不是BindingResult,也不是bean名称的普通目标对象)

Java 表单验证错误后的Spring MVC(既不是BindingResult,也不是bean名称的普通目标对象),java,spring,jsp,spring-mvc,Java,Spring,Jsp,Spring Mvc,我遇到一个模型属性问题,该属性在表单验证后似乎“消失”: public class QuestionController { //... @RequestMapping(value="/get", method=RequestMethod.GET) public String prepareVoterBean(Model model, @RequestParam String voterID) { ... VoterBean questio

我遇到一个模型属性问题,该属性在表单验证后似乎“消失”:

public class QuestionController {
    //...
    @RequestMapping(value="/get", method=RequestMethod.GET)
    public String prepareVoterBean(Model model, @RequestParam String voterID) {
        ...
        VoterBean questions = service.getQuestionBean(voterID);
        model.addAttribute("questions", questions);
        return "questionPage";
    }

    @RequestMapping(method=RequestMethod.POST)
    public String processSubmit(@Valid VoterBean questions, BindingResult result) {
        if (result.hasErrors()) {
            logger.info("QuestionController encountered form errors ");
            return "questionPage";
        }
        return "redirect:/ballot/get";
       }
以下是questionPage.jsp,其中既没有BindingResult,也没有bean名称的普通目标对象(“问题”):


安全问题

:

//...

questionPage在HTTP get请求中呈现得很好,但是当我提交带有验证错误的表单时,触发processSubmit()返回questionPage时,出现了BindingResult错误。我很困惑我做错了什么,因为当第一次返回questionPage时,QuestionsBean必须是可供questionPage使用的,但是在HTTP POST请求出现验证错误后,页面突然找不到bean。非常感谢你的帮助。谢谢。

如果您想让bean神奇地自动回到映射上,您需要通过注释方法参数告诉Spring使用映射中的bean作为绑定目标:

@RequestMapping(method=RequestMethod.POST)
public String processSubmit(@Valid @ModelAttribute("questions") VoterBean questions, BindingResult result) {
    if (result.hasErrors()) {
        logger.info("QuestionController encountered form errors ");
        return "questionPage";
    }
    return "redirect:/ballot/get";
   }

我遇到了完全相同的问题,并补充道: @模型属性(“帐户”) 我的JSP中的帐户位于:

 <sf:form method="post" action="${pageContext.request.contextPath}/register" commandName="account"> 

返回到
问题页面后,
问题
不再在模型中。您必须在
if(result.hasErrors())
块中再次添加它。模型属性的寿命与请求一样长。工作起来就像一个符咒!谢谢,我遇到了完全相同的问题,并在JSP中添加了@modeldattribute(“account”):修复了验证失败时错误消息的问题。现在,如果验证失败,请返回原始表单页面,并查看验证错误消息。谢谢你的帮助,阿尔夫。
 <sf:form method="post" action="${pageContext.request.contextPath}/register" commandName="account"> 
@RequestMapping("/createaccount")
public String createAccount(Model model) {

    model.addAttribute("account", new Identity());

    return "createaccount";
}

@RequestMapping(value="/register", method=RequestMethod.POST)
public String doRegister(Model model, @Valid @ModelAttribute("account") Identity account, BindingResult result) {

    if(result.hasErrors()) {
        System.out.println("failed");
        return "createaccount";
    }

    //offersService.create(offer);
    System.out.println("success");

    return "accountSuccess";
}