我已经尝试了一段时间,但找不到合适的解决方案。
我想使用JSTL来检查我的Spring MVC 2.5中是否存在任何绑定错误(字段错误或全局错误)。
我知道我可以使用这段代码:
<p>
<spring:hasBindErrors name="searchItems">
An Error has occured
</spring:hasBindErrors>
</p>
但我想利用JSTL检查是否有任何错误。
我使用JSTL尝试过这个:
<c:if test="${not empty errors}">
An Error has occured
</c:if>
但似乎我无法正确捕捉它。
我需要使用JSTL,因为JSP的其他部分依赖于是否存在绑定错误。
答案 0 :(得分:6)
如上所述
我想利用JSTL检查是否有任何错误
只是使用(它只适用于Spring MVC 2.5 - 对于Spring MVC 3.0不可移植虽然我认为它是 requestScope ['bindingResult。&lt; COMMAND_NAME_GOES_HERE&gt; .allErrors'] )
<c:if test="${not empty requestScope['org.springframework.validation.BindingResult.<COMMAND_NAME_GOES_HERE>'].allErrors}">
An Error has occured!!!
</c:if>
请记住默认命令名称是非限定命令类名称,首字母小写。请注意,下面的命令名称是 pet
private PetValidator petValidator = new PetValidator();
@RequestMapping(method.RequestMethod.POST)
public void form(Pet command, BindingResult bindingResult) {
if(petValidator.validate(command, bindingResult)) {
// something goes wrong
} else {
// ok, go ahead
}
}
所以你的表单应该是
<!--Spring MVC 3.0 form Taglib-->
<form:form modelAttribute="pet">
</form:form>
<!--Spring MVC 2.5 form Taglib-->
<form:form commandName="pet">
</form:form>
除非您使用@ModelAttribute
@RequestMapping(method.RequestMethod.POST)
public void form(@ModelAttribute("command") Pet command, BindingResult bindingResult) {
// same approach shown above
}
这样,您的表单应该是
<!--Spring MVC 3.0 form Taglib-->
<form:form modelAttribute="command">
</form:form>
<!--Spring MVC 2.5 form Taglib-->
<form:form commandName="command">
</form:form>
答案 1 :(得分:4)
这样的事情:
<spring:hasBindErrors name="userName">
<c:set var="userNameHasError" value="true" />
</spring:hasBindErrors>
<c:choose>
<c:when test="${userNameHasError}">
<%-- Display username as textbox --%>
</c:when>
<c:otherwise>
<%-- Display username as label --%>
</c:otherwise>
</c:choose>
您也可以设置错误以捕获页面上的所有错误(未经测试):
<spring:hasBindErrors name="*">
<c:set var="userNameHasError" value="true" />
</spring:hasBindErrors>
享受!
答案 2 :(得分:3)
在使用<spring:hasBindErrors>
标签后,我发现它有一些限制:
仅在出现错误时才有用。
org.springframework.validation.Errors
对象只能在标记
如果只是想知道是否有错误怎么办?如果没有错误,<spring:hasBindErrors>
将变得无用。在与我的同事做了一些研究之后,我们打印出了所有的请求属性。原来有一个名为:
org.springframework.validation.BindingResult.command
此处的命令对象是表单支持命令对象。 由于它可能被命名为不直观,因此该属性包含对我们的Errors对象的引用。 因此,这有效:
${requestScope['org.springframework.validation.BindingResult.command'].errorCount}
并让我们处理 JSTL
中备受追捧的错误对象