14

我有一个使用 jsp taglibs 的简单 Spring 3 MVC 表单。我需要根据表单中的字段是否有任何与之相关的错误来添加一个类。这是我的 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>

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

4

3 回答 3

15

您是否尝试<spring:hasBindErrors>过标记(我不明白您的意思是写“不使用表单标记库”)?

<%@ 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>标签有绑定到实际绑定错误的errors变量(参见Errors接口)。您可以通过 . 检查字段是否有错误errors.hasFieldErrors(fieldName)


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

于 2012-08-30T20:47:22.310 回答
12

虽然这有点模糊,但我认为它更简单,因为它是单行代码,如果我只是像任何理智的 Java 开发人员一样使用 scriplets 的话。Taglibs需要死死死死,然后再死一些。它们太可怕了,我不敢相信 Java 开发人员仍然认为它们确实有帮助,而不是浪费我们的全部时间。当我们使用这些东西时,PHP 开发人员会嘲笑我们。

<div class="control-group ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('firstName') ? 'error' : ''}">
于 2012-08-31T01:29:28.960 回答
4

有更好的方法来获取错误消息

<spring:hasBindErrors name="yourCommandName">
    ${errors.hasFieldErrors('userId') ? errors.getFieldError('userId').defaultMessage : ''}
</spring:hasBindErrors>

和一个班轮

 ${requestScope['org.springframework.validation.BindingResult.user'].hasFieldErrors('emailId') ? requestScope['org.springframework.validation.BindingResult.user'].getFieldError('emailId').defaultMessage : ''}
于 2015-02-13T15:21:08.560 回答