当前位置: 首页 > 知识库问答 >
问题:

表单验证错误后的Spring MVC(BindingResult和bean名称的纯目标对象都没有)

方野
2023-03-14

我遇到了一个html" target="_blank">模型属性的问题,该属性在表单验证后似乎“消失”了:

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名称('Questions')的纯目标对象:

<form:form modelAttribute="questions" method="post">
    <fieldset>      
        <legend>Security Questions</legend>
        <p>
            <form:label for="birthDate" path="birthDate" cssErrorClass="error"> <fmt:message key="questions.birthDate"/>: </form:label></br>
            <form:input path="birthDate" /><form:errors path="birthDate"/>
        </p>
        //...

questionPage在HTTP get请求中呈现得很好,但是当我提交wtith验证错误的表单,从而触发processSubmit()返回questionPage时,我会出现BindingResult错误。我对自己做错了什么感到非常困惑,因为我怀疑bean在第一次返回bean时一定是可以用于questionPage的,但是在一个带有验证错误的HTTP POST请求之后,页面突然找不到该bean。非常感谢你的帮助。谢了。

共有1个答案

韦睿
2023-03-14

如果希望bean神奇地自动返回到map上,则需要通过注释方法参数来告诉Spring使用map中的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";
   }
 类似资料: