我有一个通过实现 Spring Validator 接口(interface)来验证的表单。 验证只涉及我表单中的字段。我对此没有问题,但我想做但我不知道如何进行的是在我的 Controller 中调用一个服务方法,如果此方法返回特定值,则返回到表单页面并显示jsp页面中的错误信息。
validator :
public class TrunkValidator implements Validator{
@Override
public boolean supports(Class<?> clazz) {
return Trunk.class.equals(clazz);
}
public void validate(Object obj, Errors errors) {
Trunk trunk = (Trunk) obj;
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "compagnyName", "field.required", "Nom emtreprise est obligatoire");
ValidationUtils.rejectIfEmptyOrWhitespace(errors, "pbxName", "field.required", "Nom Pbx est obligatoire");
if ( ! errors.hasFieldErrors("compagnyName")) {
if ("trunk".equals(trunk.getCompagnyName()))
errors.rejectValue("compagnyName", "sssss", "déja existant");
}
}
}
Controller :
@RequestMapping(value = "/createTrunk", method = RequestMethod.POST)
protected ModelAndView createTrunk(@Valid Trunk trunk,
BindingResult bindingResult) {
// form validation
if (bindingResult.hasErrors()) {
ModelAndView model = new ModelAndView("/jsp/createTrunk.jsp");
model.addObject(ATTRIBUTE_BASE_URL, baseUrl);
return model;
} else {
// if service method retun error message or exception
// display form with error message
}
}
JSP:
<form:form method="POST" commandName="trunk" action="${baseUrl}/createTrunk">
<form:errors path="*" cssClass="errorblock" element="div" />
<table>
<tr>
<td>Nom de l'entreprise :</td>
<td><form:input path="compagnyName" /></td>
<td><form:errors path="compagnyName" cssClass="error" /></td>
</tr>
<tr>
<td>Nom de PBX :</td>
<td><form:input path="pbxName" /></td>
<td><form:errors path="pbxName" cssClass="error" /></td>
</tr>
<tr>
<td>N° de commande :</td>
<td><form:input path="orderNum" /></td>
<td><form:errors path="orderNum" cssClass="error" /></td>
</tr>
<tr>
<td>LDI :</td>
<td><form:input path="ldi" /></td>
<td><form:errors path="ldi" cssClass="error" /></td>
</tr>
<tr>
<td>INSEE :</td>
<td><form:input path="insee" /></td>
<td><form:errors path="insee" cssClass="error" /></td>
</tr>
最佳答案
在你的 Controller 中添加一个@InitBinder
:
@InitBinder("trunk")
public void initBinderAll(WebDataBinder binder) {
binder.setValidator(new TrunkValidator());
}
关于java - 验证 Spring 服务层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20515664/