使用Spring CommandName处理错误

时间:2015-06-18 10:38:00

标签: spring

当使用Spring框架并在commandName对象上绑定一个表单来添加时,让我们说一个具有以下字段的人。

save()

在服务器上我有以下代码

<form method="POST" action="addPerson.htm" commandName="person">
            <input id="firstname" name="firstname"value="${person.firstname}"/>
            <br>
             <input id="name" name="name" value="${person.name}"/>
             <br>
             <input id="age" name="age" value="${person.age}"/>
</form>

如何使用此方法进行错误处理,例如,让我们说年龄必须是正数,并且名字可以留空。

1 个答案:

答案 0 :(得分:1)

您需要创建一个新的Validator类,实现Validator接口。 你的验证器可以是这样的:

    public class PersonValidator implements Validator {
        public boolean supports(Class<?> clazz) {
            return Person.class.equals(clazz);
        }

        public void validate(Object target, Errors errors) {

            Person person=(Person)target;

            if ( person.getAge() < 0 ) {
                 errors.rejectValue("age", "age_positive");
                 // Or you can use this approach as well to parametrize the error message:
                //errors.rejectValue("age", "age_positive", ArrayParametersIfNeeded, "DefaultMessage");
            }

        }

    }

您还需要有一个error.properties文件来保存允许i18n的错误消息。 您可以在此处获得有关验证程序的所有必需信息:Validators

如果有,则需要在控制器中创建initBinder方法:

@InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.addValidators(yourValidator);
    }

然后,在控制器方法中,您可以传递此附加参数:BindingResult result,如果需要,您将获得错误信息。 此外,您需要将此位添加到表单:

<form:errors path="age"/></c:set>

低于<input id="age" name="age" value="${person.age}"/>

我建议您更改<input>代码的<form:input>元素。