복붙노트

[SPRING] 스프링 MVC : 오류가있는 페이지로 리디렉션하는 방법?

SPRING

스프링 MVC : 오류가있는 페이지로 리디렉션하는 방법?

컨트롤러가 사용자 지정 오류 메시지가있는 페이지로 리디렉션되도록하려고합니다.

    @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)가있는 것처럼 페이지로 돌아가도록 Controller를 가져 오는 방법입니다.

미리 감사드립니다.

해결법

  1. ==============================

    1.jsp에 다음 섹션을 추가 할 수 있습니다.

    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의 오류 클래스는 빨간색 블록으로 표시 할 수있는 사용자 정의 CSS입니다.

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

    이걸 좀 볼 수도 있습니다. 희망이 내 대답은 당신을 도왔습니다 ..

  2. ==============================

    2.컨트롤러 메소드에 문제가 있습니다. 결과에서 getAllErrors () 메소드를 호출하는 것이 getFieldErrors ()보다 더 좋습니다. 물론 결과가 BindingResult 유형 인 경우. 이렇게 :

    컨트롤러 메소드에 문제가 있습니다. 결과에서 getAllErrors () 메소드를 호출하는 것이 getFieldErrors ()보다 더 좋습니다. 물론 결과가 BindingResult 유형 인 경우. 이렇게 :

    model.addAttribute ( "오류", result.getAllErrors ());

  3. from https://stackoverflow.com/questions/15778913/spring-mvc-how-to-redirect-to-a-page-with-error by cc-by-sa and MIT license