<form:form modelAttribute="userDataUpdatingSettings" id="orgSettingsForm" action="${userDataUpSave}" method="POST">
...
<form:select path="email.condition" items="${attributeConditionValues}" />
...
И так userDataUpdatingSettings это объект нашего бина, email это поле бина, а email.condition это поле поля email, но оно не элементарного типа, а классового.
Так мы получим ексепшин при попытке сохранить это поле в модель.
Чтобы этого не произошло мы должны обеспечить реализацию java.bean.PropertyEditor для класса нашего этого поля.
Если этот проперти-эдитор будет в том же пакете, что и Класс проперти, то больше ничего делать не нужно.
Если же нет возможности эдитор в том же пакете, то есть несколько способов, но самый характерный для Spring MVC это через @InitBinder в аннотационном способе:
@Controller
public class MyFormController {
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
}
// ...
}
Или через перегрузку initBinder, если мы используем вариант через перегрузку SimpleFormController
public final class RegisterUserController extends SimpleFormController {
private final PropertyEditorRegistrar customPropertyEditorRegistrar;
public RegisterUserController(PropertyEditorRegistrar propertyEditorRegistrar) {
this.customPropertyEditorRegistrar = propertyEditorRegistrar;
}
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder)
throws Exception {
this.customPropertyEditorRegistrar.registerCustomEditors(binder);
}
// other methods to do with registering a User
}
Комментариев нет:
Отправить комментарий