2017-02-14 17 views
0

Я получаю следующую ошибку в приложении spring4 + thymeleaf3, когда пытаюсь показать ошибки проверки в своем шаблоне формы.Spring4 + Thymeleaf3 Проверка формы: bean name # поля не доступны в шаблонах

Neither BindingResult nor plain target object for bean name '#fields' available as request attribute 

Моя форма следующая.

<form th:action="@{/user/save}" method="post" th:object="${user}"> 

<ul th:if="${#fields.hasErrors()}"> 
    <li th:each="err : ${#fields.errors('*')}" th:text="${err}"></li> 
</ul> 

<div> 
    <label>Name</label> 
    <div> 
     <input type="text" th:field="*{firstName}" placeholder="First Name"> 
     <input type="text" th:field="*{lastName}" placeholder="Last Name"> 
     <div th:if="${#fields.hasErrors('firstName')}" th:errors="${#fields.errors('firstName')}"></div> 
     <div th:if="${#fields.hasErrors('lastName')}" th:errors="${#fields.errors('lastName')}"></div> 
    </div> 
</div>... 

Форма визуализирована для последующего отображения запроса на получение.

@GetMapping("/create") 
public String create(ModelMap model) { 
    model.put("user", new User()); 
    return VIEW_DIR.concat("form"); 
} 

Но это приводит к вышеуказанной ошибке, когда форма отправляется с некоторыми недопустимыми полями в следующий метод.

@PostMapping("/save") 
public String save(@Valid User user, BindingResult bindingResult, ModelMap model) { 
    if(bindingResult.hasErrors()) { 
     return VIEW_DIR.concat("form"); 
    } 

    userService.save(user); 
    return "redirect:list"; 
} 

Не могли бы вы показать мне, где ошибка.

ответ

0

Вы устанавливаете неправильные значения для th: ошибки внутри вашего элемента формы div. th: ошибки должны содержать имя поля. Измените свою форму следующим образом:

<div> 
     <input type="text" th:field="*{firstName}" placeholder="First Name"> 
     <input type="text" th:field="*{lastName}" placeholder="Last Name"> 
     <div th:if="${#fields.hasErrors('firstName')}" th:errors="*{firstName}"></div> 
     <div th:if="${#fields.hasErrors('lastName')}" th:errors="*{lastName}"></div> 
    </div> 
+0

Я пробовал, все еще получая ту же ошибку. – Johna

+1

ответ обновлен. пожалуйста, проверьте – mhshimul

+0

Да, вы поняли это. оно работает. – Johna