繁体   English   中英

Thymeleaf表单验证唯一值,如何将错误传递给查看

[英]Thymeleaf form validation for unique value, how to pass error to view

我正在为我的应用程序创建注册表单。 我想检查用户名是否唯一。 我是这样做的

@Transactional
@RequestMapping(value = "/users/", method = RequestMethod.POST)
public String createUser(@ModelAttribute("user") @Valid User user, BindingResult bindingResult){


    if (bindingResult.hasErrors() || !userService.isUniqueUsername(user)) {
        ModelAndView modelAndView = new ModelAndView("redirect:/admin/createnew");
        modelAndView.addObject(bindingResult.getFieldErrors());
        ObjectError objectError = new ObjectError("ERROR", "Username exists!");
        bindingResult.addError(objectError);
        return "user-create";
    }

我理解我的逻辑在这里是错误的,因为我没有将bindingresult给予“user-create”视图。

<div th:if="${#fields.hasErrors('username')}" th:errors="*{username}">
    <p class="bg-danger text-center">Username error!</p>
</div>

所以atm我只能显示来自@NotNull和@Size等注释的错误但是我如何传递信息来查看服务器上的用户名不是唯一的?

而不是ObjectError使用FieldError对象并将其添加到绑定结果。 验证:

if (influence.getInfluenceImage() == null || influence.getInfluenceImage().isEmpty()) {
    FieldError error = new FieldError("addInfluenceDTO", "influenceImage",
                                      "Influence Image should not be empty.");
    bindingResult.addError(error);
}

在我看来:

<label th:if="${#fields.hasErrors('influenceImage')}" th:class="'error'" th:errors=*{influenceImage} class="col-lg-4 control-label" style="color:red;" ></label>

您可以将错误绑定到所需的任何字段

if (!form.getUsername().isEmpty() && accountService.exists(form.getUsername()))
      bindingResult.rejectValue("username", "error.username", "Username exists!");

我认为实现目标的最佳方法应该是进行自定义验证,然后页面流将继续保持相同。

在这里,我将与您分享如何创建自己的验证的链接(只是创建一个注释并实现isValid方法)

http://codetutr.com/2013/05/29/custom-spring-mvc-validation-annotations/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM