bean 名称 'id' 的 BindingResult 和普通目标对象都不能用作请求属性
Neither BindingResult nor plain target object for bean name 'id' available as request attribute
我在尝试通过循环迭代添加相关用户时不断收到 "Neither BindingResult nor plain target object for bean name 'id' available as request attribute" 错误。
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getUser(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam("id") String id, @ModelAttribute("userForm") UserForm userForm)
{
User user = userService.getUser(id);
List<User> relateUsers = userService.getRelatedUsers(id);
userForm.setUser(user);
userForm.setRelateUsers(relateUsers);
return userDetailForm;
}
<div class="trackList" th:if="${userForm.relatedUsers.size() > 0}" th:each="relatedUser : ${userForm.relatedUsers}" >
<th:form method="POST" th:action="@{/user}">
<input type="hidden" id="id" th:field="*{id}"/>
<div>
<a class="add" role="button">Add</a>
</div>
</th:form>
</div>
您的示例很奇怪,因为您的处理程序只是映射到 GET
请求。无论如何,您的 POST
处理程序的方法签名对于 BindingResult
.
无效
Spring Framework documentation 说:
org.springframework.validation.Errors / org.springframework.validation.BindingResult validation results for a preceding command or form object (the immediately preceding method argument).
您必须将 POST 处理程序的方法签名从类似的东西更改为
@Valid @ModelAttribute("userForm") UserForm userForm, @RequestParam("id") String id
到
@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult result, @RequestParam("id") String id
它帮助我使用以下代码将值绑定到模型属性:
<input type="hidden" th:id="id" th:name="id" th:value="*{id}"/>
我在尝试通过循环迭代添加相关用户时不断收到 "Neither BindingResult nor plain target object for bean name 'id' available as request attribute" 错误。
@RequestMapping(value = "/user", method = RequestMethod.GET)
public String getUser(HttpServletRequest request, HttpServletResponse response, Model model, @RequestParam("id") String id, @ModelAttribute("userForm") UserForm userForm)
{
User user = userService.getUser(id);
List<User> relateUsers = userService.getRelatedUsers(id);
userForm.setUser(user);
userForm.setRelateUsers(relateUsers);
return userDetailForm;
}
<div class="trackList" th:if="${userForm.relatedUsers.size() > 0}" th:each="relatedUser : ${userForm.relatedUsers}" >
<th:form method="POST" th:action="@{/user}">
<input type="hidden" id="id" th:field="*{id}"/>
<div>
<a class="add" role="button">Add</a>
</div>
</th:form>
</div>
您的示例很奇怪,因为您的处理程序只是映射到 GET
请求。无论如何,您的 POST
处理程序的方法签名对于 BindingResult
.
Spring Framework documentation 说:
org.springframework.validation.Errors / org.springframework.validation.BindingResult validation results for a preceding command or form object (the immediately preceding method argument).
您必须将 POST 处理程序的方法签名从类似的东西更改为
@Valid @ModelAttribute("userForm") UserForm userForm, @RequestParam("id") String id
到
@Valid @ModelAttribute("userForm") UserForm userForm, BindingResult result, @RequestParam("id") String id
它帮助我使用以下代码将值绑定到模型属性:
<input type="hidden" th:id="id" th:name="id" th:value="*{id}"/>