java - 如何在 spring mvc 的 jsp 中显示验证错误

标签 java spring validation jsp spring-mvc

我想在我的 jsp 页面中显示验证错误。

我的目标是:

public class MyObjectDTO{ @valid private TextDTO text1; @valid private TextDTO text2 }

public class TextDTO{ @NotBlank private String code;@NotBlank private String label;}

我的 Controller :

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String creationProjet(@Valid @ModelAttribute MyObjectDTO obj, BindingResult result,
                             Model model) {
    if (result.hasErrors()) {
        model.addAttribute("hasErrors", true);
        return "create";
    } else {
        ....
        return "redirect:/list";
    }
}

我的jsp

<div class="col-md-6 form-group ${requestScope['org.springframework.validation.BindingResult.obj'].hasFieldErrors('text1') ? 'has-error' : ''}">
    <label class="col-lg-3 control-label">my label</label>
    <div class="col-lg-5">
        <form:select class="form-control" name="type" path="text1.code" id="selectType">
    <option value="">---------</option>
            <c:forEach items="${types }" var="type">
                <form:option value="${type.id }">
                    <c:out value=" ${type.code}"></c:out>
                </form:option>
            </c:forEach>
        </form:select>
        <form:errors path="text1.code" class="has-error  error"></form:errors>
    </div>
</div>

我的 Controller 重定向到创建页面,但未显示错误。在 Debug模式下,有一个错误表明 text1.code 不能为空白。

最佳答案

在您的 Jsp 页面中添加以下行

<div class="col-md-6 form-group ${requestScope['org.springframework.validation.BindingResult.obj'].hasFieldErrors('text1') ? 'hasErrors' : ''}">

或者使用 hasFieldErrors() 代替

<div class="col-md-6 form-group ${requestScope['org.springframework.validation.BindingResult.obj'].hasFieldErrors()}">

关于 addAttributes("hasErrors",true),使用 addFlashAttribute(),它存储在 flashmap 和对象中(在您的情况下,当您导航以创建页面或在两个 Controller 之间重定向。)Look at this for more

在你的 Controller 中添加这样的RedirectAttributes对象

@RequestMapping(value = "/create", method = RequestMethod.POST)
public String creationProjet(@Valid @ModelAttribute MyObjectDTO obj,     
BindingResult result,
RedirectAttributes redirectAtt,
Model model) {
if (result.hasErrors()) {
    redirectAtt.addFlashAttribute("hasErrors","ur message");//instead of true you can write your own message 
    return "create";
} else {
    ....
    }
    return "redirect:/list";
}

}

如果你自己写消息而不是 true

<c:if test="${not empty hasErrors">
     <p>${hasErrors}</p>
</c:if>

关于java - 如何在 spring mvc 的 jsp 中显示验证错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39393966/

相关文章:

java - 使用 proguard 进行混淆后出现 Jersey 错误,尝试实例化抽象类

PHP空字段验证

javascript - 使用 $.each 进行表单验证

Javascript 表单提交验证优于验证

java - 无法使用java类运行批处理命令

java - 为什么 1>>32 == 1?

java - 无法在Spring Boot中初始化Bean

java - Hibernate + Spring with Oracle - 使用分层查询(START WITH + CONNECT BY)

java - 构造函数总是必须是公共(public)的吗?

java - 如果缓存了 MockHttpServletRequestBuilder,则 MockMvc.perform 会抛出带有并行流的 ConcurrentModificationException