2015-03-06 2 views
0

Я действительно изучаю структуру Spring с Spring Boot и Sprint MVC. Я делаю форму, которая публикует некоторые данные для завершения объекта, и мне нужно проверить некоторые значения.Аннотации и исправление ошибки весеннего валидатора

Дело в том, что валидация работает, по сути, если я не уважаю валидацию, я перенаправляюсь (на самом деле, URL-адрес не изменяется) в содержимое error.html.

Как я могу правильно управлять своим перенаправлением? Это не работает таким образом:

@RequestMapping(value = "/print", method = RequestMethod.POST) 
    public String printPost(@ModelAttribute("printerentity") @Valid PrinterEntity print, Model model, BindingResult bindingResult) { 
     if (bindingResult.hasErrors()) { 
      return "redirect:/formPrinter"; 
     } 

     model.addAttribute("printed", print.getName()); 
     model.addAttribute("printerentity", new PrinterEntity()); 

     return "index"; 
    } 

и форма:

<form method="post" th:action="@{/print}" th:object="${printerentity}"> 
    <input type="text" th:field="*{name}"/> 
    <button type="submit">Valider</button> 

    <p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</p> 
</form> 

Что я делаю неправильно?

EDIT: Кажется, что, когда у меня есть ошибка, я не проходят в коде контроллера: O =>

@RequestMapping(value = "/print", method = RequestMethod.POST) 
    public String printPost(@ModelAttribute("printerentity") @Valid PrinterEntity print, Model model, BindingResult bindingResult) { 
     System.out.println("I dont passe here when error but I m redirected"); 
     if (bindingResult.hasErrors()) { 
      return "formPrinter"; 
     } 

     model.addAttribute("printed", print.getName()); 
     model.addAttribute("printerentity", new PrinterEntity()); 

     return "index"; 
    } 

спасибо заранее

+0

атрибуты модели атрибутов запроса. Они существуют только в одном цикле запроса-ответа. Вы выполняете перенаправление. Это два цикла запроса-ответа. –

+0

Он не работает, даже если я не перенаправляю и возвращаю только соответствующий вид: - /. И согласно учебнику (http://spring.io/guides/gs/validating-form-input/) перенаправление не может работать? Спасибо за ваш ответ кстати :-) – mfrachet

ответ

1

Как я должен сделать, чтобы управлять своим переназначение правильно?

При перенаправлении запроса, то текущий запрос разрушен, а новый объект запроса создан, чтобы обработать запрос, так что в соответствии с Sotirios Delimanolis отметил в комментарии, что модель атрибуты запроса атрибутов, которые доступны только для запроса. Если вы хотите сохранить атрибуты модели в сеансе HTTP между запросами, используйте @SessionAttributes или FlashAttributes.

В соответствии с вашей HTML формы у вас есть:

<p th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</p> 

вы имеете в виду вы хотите, чтобы показать ошибки проверки на той же странице, то не перенаправлять вернуть ту же точку зрения.

if (bindingResult.hasErrors()) { 
    //return "redirect:/formPrinter"; 
    return "your html form view"; 
} 

тогда, на ваш взгляд, вы можете сделать все сообщения об ошибках валидации, как:

<p th:each="err : ${#fields.errors('*')}" th:text="${err}"></p> 
+0

Спасибо за это, это яснее на мой взгляд. Но факт в том, что у меня такая же проблема и что я даже не прохожу в контроллер, когда получаю плохое поле проверки: -/ – mfrachet

+0

Не разрешено на самом деле. У меня всегда была проблема, и я редактировал свой пост. – mfrachet

Смежные вопросы