【发布时间】: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;">
<input class="btn btn-success btn-sm"
type="submit" value="Backup" />
</td>
</tr>
</tbody>
</table>
</div>
</div>
</form:form>
怎么了?验证工作正常,但 <form:errors path="name" /> 不返回任何内容。
【问题讨论】:
-
它会打印
中的内容吗? -
是,但不是
error标签。我试图将其从c:if中删除,但没有任何变化。