【发布时间】:2019-03-20 09:37:52
【问题描述】:
我正在尝试验证我的表单输入,但在提交后它不会加载我的控制器方法,而是显示带有Internal Server Error 和状态500 的Whitelabel Error Page,但具有正确的验证错误。
我知道这一定是与我的方法的预期参数匹配的问题,但到目前为止,我收集到的规则只是BindingResult 然后Model 我做到了,但它仍然没有触发我的控制器方法.. .
感谢任何想法。
Controller-Method,不幸的是没有触发:
@Controller
@Validated
public class UserController {
@PostMapping("/users/add")
def String usersAdd(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "userAdd"
} else {
userRepository.save(user)
return "usersList"
}
}
模板形式:
<form action="#" th:action="@{/users/add}" th:object="${user}" method="post">
<div class="form-row">
<div class="form-group col-md-12">
<input type="text" class="form-control" th:field="*{name}">
<div th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</div>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6">
<button type="submit" class="btn btn-success">Add</button>
</div>
</div>
</form>
模型类:
@Document(collection = "users")
public class User {
@Id
String id
@Size(min=3, max=100)
String name
}
更新:
进行调试并找到这部分,所以它似乎使用正确的参数调用。我是 Spring 新手,所以我很难思考其他“新手”问题。
在InvocableHandlerMethod.java 中,方法DoInvoke 在我的usersAdd 上调用Station, BeanPropertyBindingResult, BindingAwareModelMap。
调用该方法时,它会导致ConstraintViolationException 将中止调用,这是预期的吗?
【问题讨论】:
-
您是否尝试在隐藏输入中添加 id?
-
我添加了
<input th:type="hidden" th:field="*{id}" />无济于事。 -
与我的 java 代码完美配合。不过我没有尝试过 groovy。
-
你还在
User user参数前面使用了@Valid?因为如果我删除它,该方法实际上会被执行,因为现在没有ConstraintViolationException被抛出。但出乎意料的是bindingResult.hasErrors()是假的,并且由于该字段是空的,它实际上应该是真的……猜不在那里。
标签: validation spring-mvc groovy thymeleaf