2014-12-29 3 views
2

명령 개체에서 @Valid를 통해 양식을 만들고 해당 데이터의 유효성을 검사하려고합니다. 유효성 검사는 제대로 수행되지만 오류는 웹으로 돌아가고 있습니다.[Spring MVC - Thymeleaf] - 양식 유효성 검사 및 오류 메시지

이 내가 가진 무엇 :

HTML

@RequestMapping(value = "/register", params = {"save"}, method = RequestMethod.POST) 
public String register (final ModelMap model, @Valid final UsuarioForm userForm, final BindingResult result) { 
    if (result.hasErrors()) { 
     return "register"; 
    } else { 
     return "redirect:/" + HomeController.PAGE_NAME; 
    } 
} 

"제출"을 클릭하면 "등록"방법이라고

<div id="content" layout:fragment="contenido"> 
    <div sec:authorize="isAnonymous()"> 
     <form class="form-horizontal" action="#" th:action="@{register}" th:object="${userForm}" method="post"> 
      <input type="hidden" name="_csrf" th:value="${_csrf.token}"/> 
      <fieldset> 
       <label for="alias" th:text="#{form.register.alias}">Alias</label> 
       <input id="alias" type="text" th:field="*{alias}" placeholder="Su alias" required="required" autofocus="autofocus"/> 

       <label for="pass" th:text="#{form.register.password}">Contraseña</label> 
       <input id="pass" type="password" th:field="*{password}" pattern="[\w\d-_]{5,15}" required="required" th:title="#{form.error.password}"/> 
       <p th:if="${#fields.hasErrors('password')}" th:errors="*{password}">Error en el dato ingresado</p> 

       <button type="submit" name="save" class="btn btn-primary" th:text="#{control.register}">Registrarme</button> 
      </fieldset> 
     </form> 
    </div> 
</div> 

컨트롤러, 결과. hasErrors()가 true이므로 동일한 페이지가 표시되어야하지만이 오류가 발생합니다.

스택

java.lang.IllegalStateException: Neither BindingResult nor plain target object for bean name 'userForm' available as request attribute 
     org.springframework.web.servlet.support.BindStatus.<init>(BindStatus.java:144) 
     org.thymeleaf.spring4.util.FieldUtils.getBindStatusFromParsedExpression(FieldUtils.java:396) 
     org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:323) 
     org.thymeleaf.spring4.util.FieldUtils.getBindStatus(FieldUtils.java:289) 
     org.thymeleaf.spring4.processor.attr.AbstractSpringFieldAttrProcessor.processAttribute(AbstractSpringFieldAttrProcessor.java:98) 
     org.thymeleaf.processor.attr.AbstractAttrProcessor.doProcess(AbstractAttrProcessor.java:87) 
     org.thymeleaf.processor.AbstractProcessor.process(AbstractProcessor.java:212) 
     org.thymeleaf.dom.Node.applyNextProcessor(Node.java:1017) 
     org.thymeleaf.dom.Node.processNode(Node.java:972) 

내가 컨트롤러에서 모델에이 방법으로 "사용자 정의 폼을"추가하면 :

컨트롤러

@RequestMapping(value = "/register", params = {"save"}, method = RequestMethod.POST) 
public String register (final ModelMap model, @Valid final UsuarioForm userForm, final BindingResult result) { 
    if (result.hasErrors()) { 
     model.addAttribute("userForm", userForm); //THIS LINE IS ADDED 
     return "register"; 
    } else { 
     return "redirect:/" + HomeController.PAGE_NAME; 
    } 
} 

오류가 사라지지만을 수정합니다. .. HTML ${#fields.hasErrors('password')}의 표현식이 거짓이므로 결과를 표시 할 수 없습니다. 오류 메시지를 사용자에게 보냅니다.

이 문제가 발생하는 이유는 무엇입니까? 미리 감사드립니다.

PS : 나는 Thymeleaf 2.1.4

답변

5

와 스프링 MVC 4.1.2을 사용하고이

public String register(final ModelMap model, 
     @Valid final UsuarioForm userForm, 
     final BindingResult result) 

은 다음과 같아야합니다

public String register(final ModelMap model, 
     @ModelAttribute("userForm") @Valid final UsuarioForm userForm, 
     final BindingResult result) 

을 주목 @ModelAttribute 주석.

+0

완벽하게 작동했습니다. 고마워요. 새해 복 많이 받으세요. 감사합니다. –

관련 문제