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

Sam*_*mar 7 java validation spring 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;}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

@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";
    }
}
Run Code Online (Sandbox Code Playgroud)

我的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>
Run Code Online (Sandbox Code Playgroud)

我的控制器重定向到创建页面,但错误未显示。在调试模式下,出现一个错误,指示text1.code不能为空白。

Bib*_*kya 5

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

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

hasFieldErrors()改用

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

和 About addAttributes("hasErrors",true),使用addFlashAttribute()存储在 flashmap 和对象中的内容(在您的情况下,当您导航到创建页面或在两个控制器之间重定向时,错误消息将处于活动状态。)查看此了解更多信息

在你的控制器中添加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";
}

}
Run Code Online (Sandbox Code Playgroud)

如果您写自己的消息而不是真实的消息

<c:if test="${not empty hasErrors">
     <p>${hasErrors}</p>
</c:if>
Run Code Online (Sandbox Code Playgroud)


San*_*nka 0

只有您缺少将部分放入模型地图中。您只放置标志。但你需要输入结果。

if(result.hasErrors()){             
    mm.addAttribute("errors", result);
    return "create";
}
Run Code Online (Sandbox Code Playgroud)