有两种主要的数据绑定初始化方法,但是在oldschool中有一个缺点,我无法弄清楚。这种注释方式很棒:
@InitBinder("order")
public void initBinder(WebDataBinder binder) {
// Problem is that I want to set allowed and restricted fields - can be done here
binder.setAllowedFields(allowedFields.split(","));
}
但我无法使用ConfigurableWebBindingInitializer完成。首先,在AnnotationMethodHandlerAdapter中创建binder实例,初始化器在HandlerMethodInvoker中的某个地方传递binder实例,所以我无法设置它...我不能做这样的事情:
<bean id="codesResolver" class="org.springframework.validation.DefaultMessageCodesResolver" />
<bean id="binder" class="org.springframework.web.portlet.bind.PortletRequestDataBinder" scope="prototype">
<property name="allowedFields" value="${allowedFields}" />
<aop:scoped-proxy />
</bean>
<bean id="webBindingInitializer" class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<property name="messageCodesResolver" ref="codesResolver" />
</bean>
因为在handlerAdapter中将binder实例传递给它。我怎样才能设置活页夹呢?
答案 0 :(得分:2)
无法在xml配置中进行设置。您必须实现自定义WebBindingInitializer ... ConfigurableWebBindingInitializer显然缺少设置允许和受限字段的可能性......
或者您可以投票SPR-8601
答案 1 :(得分:0)
这是非常古老的,但对于那些不喜欢在生产代码中使用注释的人(像我一样),这里是一个解决方案,我发现在不使用注释的情况下添加init绑定器。您只需要覆盖从Spring提供的大多数基本控制器扩展的initBinder方法:
protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception
{
System.out.println("Binding!!!!!");
super.initBinder(request, binder);
binder.registerCustomEditor(Double.class, new CurrencyPropertyEditor());
}
我的CurrencyPropertyEditor类是java.beans.PropertyEditorSupport的子类,其中getAsText,getValue,setValue和setAsText方法也被覆盖。
希望它有所帮助!!!