当我尝试在我的类中做一个"绑定"时,它会抛出一个异常,但是我怎么能在表单上显示错误呢?
控制器:
@InitBinder
public final void binder(WebDataBinder binder) {
binder.registerCustomEditor(Telefone.class, new PropertyEditorSupport(){
@Override
public void setAsText(String value){
if(null != value){
try{
setValue(Telefone.fromString(value));
} catch (IllegalArgumentException e) {
// what to do here ??
}
}
}
});
电话:
public static Telefone fromString(String s) {
checkNotNull(s);
String digits = s.replaceAll("\D", "");
checkArgument(digits.matches("1\d{2}|1\d{4}|0300\d{8}|0800\d{7,8}|\d{8,13}"));
return new Telefone(digits);
}
checkargument来自Google Preconditions
当phone无效时,抛出一个IllegalArgumentException。但是如何把它放在BindingResult
我假设你正在使用Java 5,所以你不能使用@Valid(没有JSR303)。如果是这种情况,那么唯一的选择就是使用BindingResult。
你可以这样做:
@Controller
public class MyController {
@RequestMapping(method = RequestMethod.POST, value = "myPage.html")
public void myHandler(MyForm myForm, BindingResult result, Model model) {
result.reject("field1", "error message 1");
}
}
我的jsp:
<form:form commandName="myForm" method="post">
<label>Field 1 : </label>
<form:input path="field1" />
<form:errors path="field1" />
<input type="submit" value="Post" />
</form:form>
要将错误与特定的表单关联起来,可以使用:
result.rejectValue("field1", "messageCode", "Default error message");
此外,BindingResult.reject()将错误消息与整个表单关联起来。所以选择一个适合你的。希望这对你有帮助!