【问题标题】:JSP and Spring ValidationJSP 和 Spring 验证
【发布时间】:2014-03-09 15:24:55
【问题描述】:

这是我的BackupForm

public class BackupForm {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }   


}

这是验证器:

@Component
public class BackupFormValidator implements Validator {

    public boolean supports(Class<?> clazz) {
        return BackupForm.class.isAssignableFrom(clazz);
    }       


    public void validate(Object target, Errors errors) {
        BackupForm backupForm = (BackupForm) target;

        if (backupForm.getName().length() == 0) {
            System.out.println("Empty");
            errors.rejectValue("name", "name.empty", "Name field is empty.");
        } else {
            File file = new File(Configures.getDirectory() + "\\"
                    + backupForm.getName() + ".sql");
            if (file.exists()) {
                System.out.println("Exists");
                errors.rejectValue("name", "name.exist",
                        "File." + backupForm.getName() + ".sql already exists.");
            }
        }

    }
}

这就是我在控制器中的做法:

@RequestMapping(value = "/backup", method = RequestMethod.POST)
    public String backupProcess(
            @ModelAttribute("backup") BackupForm backupForm,
            BindingResult result, Map<String, Object> map) {

        backupFormValidator.validate(backupForm, result);
        if (result.hasErrors()) {
            // Если обнаружилась ошибка, то добавим в карту идентификатор об
            // ошибке и вернем логическое представление поиска
            map.put("error", true);
            map.put("backup", new BackupForm());
            map.put("search", new SearchForm());
            return "backup";

        } else {
            return "redirect:/";
        }

    }

它可以工作,但标签errors 不起作用:

<form:form method="POST" commandName="backup">
    <c:if test="${!empty error}">
        <div class="alert alert-danger">
            <b>Can not execute command!</b>
            <form:errors path="name" />
        </div>
    </c:if>

    <div class="panel panel-default">
        <div class="panel-heading">New backup</div>
        <div class="panel-body">    

            <table style="width: 100%; border-collapse: collapse;">
                <tbody>
                    <tr>
                        <td
                            style="vertical-align: top; width: 250px; letter-spacing: 0px; word-spacing: 0px;"><form:input
                                path="name" class="form-control input-sm" type="text"
                                placeholder="Enter backup name..." value="${name}" /></td>
                        <td
                            style="text-align: left; vertical-align: top; letter-spacing: 0px; word-spacing: 0px;">
                            &nbsp;&nbsp;&nbsp;<input class="btn btn-success btn-sm"
                            type="submit" value="Backup" />
                        </td>
                    </tr>
                </tbody>
            </table>

        </div>
    </div>
</form:form>

怎么了?验证工作正常,但 &lt;form:errors path="name" /&gt; 不返回任何内容。

【问题讨论】:

  • 它会打印 中的内容吗?
  • 是,但不是error 标签。我试图将其从c:if 中删除,但没有任何变化。

标签: java spring jsp jstl


【解决方案1】:

您应该删除以下行:

map.put("backup", new BackupForm());

这一行正在将 modelAttribute 重置为新的,因此不会出现错误。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 2019-11-08
    • 2019-03-27
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多