我正在使用Spring进行表单输入和验证.表单控制器的命令包含正在编辑的模型.某些模型的属性是自定义类型.例如,Person的社会安全号码是自定义SSN类型.
public class Person {
public String getName() {...}
public void setName(String name) {...}
public SSN getSocialSecurtyNumber() {...}
public void setSocialSecurtyNumber(SSN ssn) {...}
}
Run Code Online (Sandbox Code Playgroud)
并在Spring表单编辑命令中包装Person:
public class EditPersonCommand {
public Person getPerson() {...}
public void setPerson(Person person) {...}
}
Run Code Online (Sandbox Code Playgroud)
由于Spring不知道如何将文本转换为SSN,因此我使用表单控制器的binder注册了一个客户编辑器:
public class EditPersonController extends SimpleFormController {
protected void initBinder(HttpServletRequest req, ServletRequestDataBinder binder) {
super.initBinder(req, binder);
binder.registerCustomEditor(SSN.class, "person.ssn", new SsnEditor());
}
}
Run Code Online (Sandbox Code Playgroud)
和SsnEditor只是一个java.beans.PropertyEditor可以将文本转换为SSN对象的自定义:
public class SsnEditor extends PropertyEditorSupport {
public String getAsText() {...} // converts SSN to text
public …Run Code Online (Sandbox Code Playgroud)