【问题标题】:Spring MVC: How to redirect to a page with error?Spring MVC:如何重定向到有错误的页面?
【发布时间】:2013-04-03 04:32:37
【问题描述】:

我正在尝试让我的控制器重定向到带有自定义错误消息的页面:

    @RequestMapping(method=RequestMethod.POST)
    public String processSubmit(@Valid Voter voter, BindingResult result, HttpServletRequest request) {
        if (result.hasErrors()) {
            logger.info("RegisterController encountered form errors ");
            return "registerPage";
        }
        if (service.isVoterRegistered(voter.getVoterID())) {
          logger.info("VoterID exists");

          request.setAttribute("firstName", voter.getFirstName());
          request.setAttribute("lastName", voter.getLastName());
          request.setAttribute("ssn", voter.getSsn());
          return "forward:/question";

        }else {
          logger.info("RegisterController is redirecting because it voter info failed to authenticate");
          //TODO: should re-direct to register page with error

          return "redirect:registerPage";
        }
       }
}


  <!-- registerPage.jsp -->
    <div class="container">
        <h1>
            Voter Registration
        </h1>
        <div class="span-12 last">  
            <form:form modelAttribute="voter" method="post">
                <fieldset>      
                    <legend>Voter Fields</legend>
                    <p>
                        <form:label for="firstName" path="firstName" cssErrorClass="error">First Name : </form:label></br>
                        <form:input path="firstName" /><form:errors path="firstName"/>
                    </p>
                    <p> 
                        <form:label for="lastName" path="lastName" cssErrorClass="error">Last Name : </form:label> </br>
                        <form:input path="lastName" /> <form:errors path="lastName" />
                    </p>
                    <p> 
                        <form:label for="ssn" path="ssn" cssErrorClass="error">Social Security Number : </form:label> </br>
                        <form:input path="ssn" /> <form:errors path="ssn" />
                    </p>
                    <p> 
                        <input type="submit"/>
                    </p>
                </fieldset>
            </form:form>
        </div>
        <hr>    
    </div>

在重定向到 register.jsp 页面时,我希望页面显示一条错误消息,说明选民未注册。我的问题是如何让控制器返回页面,就好像表单有验证错误一样(即 result.hasErrors() == true)。

提前致谢

【问题讨论】:

    标签: java spring jsp spring-mvc


    【解决方案1】:

    您可以在您的jsp中添加以下部分--

    <c:choose>
    <c:when test="${not empty  errors}">
        <div class="error">
        <c:forEach items="${errors}" var="err">
            ${err.defaultMessage}
            <br/>
        </c:forEach>
        </div>
    </c:when>
    </c:choose>
    

    这里c不过是这个--

    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    

    您还需要在控制器方法的 if 块中将错误传递到模型和视图中--

    model.addAttribute("errors",result.getFieldErrors());
    
    DIV 中的

    error 类不过是我的自定义 css 以显示为红色块--

    .error{
        color: red;
        border:2px solid red;
        padding:10px;
    
    }
    

    你也可以看看this
    希望我的回答对你有所帮助..

    【讨论】:

      【解决方案2】:

      您的控制器方法有问题。从结果中调用getAllErrors() 方法比getFieldErrors() 更好。当然,如果结果是 BindingResult 类型。像这样:

      model.addAttribute("errors", result.getAllErrors());

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 1970-01-01
        • 2013-09-17
        • 2018-12-13
        • 2015-05-22
        相关资源
        最近更新 更多