如何在不使用表单 taglib 的情况下访问 JSP 中的 Spring 3 MVC 验证器结果

2022-09-03 17:55:13

我有一个简单的Spring 3 MVC表单,使用jsp taglibs。我需要根据表单中的字段是否具有与之关联的任何错误来添加一个类。这是我的HTML的截图:

<div class="control-group error"> <!-- HERE: binding.hasErrors() ? "error" : "" -->
    <form:label path="username" cssClass="control-label">User Name</form:label>
    <div class="controls">
        <form:input path="username" cssClass="span3"/>
        <form:errors path="username" cssClass="help-inline" />
    </div>
</div>

因此,在第一行,class 属性有两个类“control-group”和“error”。仅当该字段具有与之关联的错误时,我才需要添加错误类。我知道WebDataBinder以某种方式包含在页面中,但我不知道如何访问它。从本质上讲,我只想执行一些很好的老式<%=binding.hasError() ?“error” : “” %>,但是我如何访问页面中的活页夹?


答案 1

你有没有试过<spring:hasBindErrors>标签(我不明白你写的“不使用表单taglib”是什么意思)?

<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>

<spring:hasBindErrors name="yourCommandName">
  <c:if test="${errors.hasFieldErrors('username')}">
    <c:set var="errorClass" value="error" />
  </c:if>
</spring:hasBindErrors>

<div class="control-group <c:out value='${errorClass}' />">

评论后编辑:

标记内部有变量(请参阅错误接口)绑定到实际的绑定错误。您可以通过 检查字段是否有错误。<spring:hasBindErrors>errorserrors.hasFieldErrors(fieldName)


在没有任何标记的情况下获取字段错误的真正晦涩的方法是 requestScope['org.springframework.validation.BindingResult.yourCommandName'].hasFieldErrors('username')...


答案 2

虽然这有点晦涩难懂,但我认为它更简单,因为它是一行,如果我只是像任何理智的Java开发人员一样使用scriplets,它就会是什么样子。Taglibs需要死死死死,然后死得更多。它们很可怕,我不敢相信Java开发人员仍然认为它们实际上有所帮助,而不是浪费我们的时间。当我们使用这些东西时,PHP开发人员会嘲笑我们。

<div class="control-group ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('firstName') ? 'error' : ''}">

推荐