我是靠谱客的博主 典雅悟空,最近开发中收集的这篇文章主要介绍 3.13、@InitBinder 和 WebDataBinder,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  这一部分示例见这个项目的 mvc 分支下的 WebDataBinderController.java


① 用@InitBinder自定义数据绑定

  用@InitBinder注解的控制器方法,允许你直接在你的控制器类中配置 Web 数据绑定。@InitBinder标记初始化WebDataBinder的方法,WebDataBinder被用于填充被注解的处理方法的命令和表单对象参数。

  这些初始化绑定器(Init-binder)方法支持@RequestMapping方法支持的所有参数,处理命令/表单对象以及相关的校验结果对象。初始化绑定器方法必须不带返回值,所以它们通常被声明为 void 的。典型的参数包括WebDataBinderWebRequest或者java.util.Locale,允许用代码方式注册特定上下文的编辑器(context-specific editors)。

  下面的例子演示了使用@InitBinder为所有的java.util.Date表单属性配置一个CustomDateEditor

@Controller
public class MyFormController 
{
    @InitBinder
    protected void initBinder(WebDataBinder binder) 
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

    // ...
}

  相对地,从 Spring 4.2 开始,考虑使用addCustomFormatter来指定Formatter实现以代替PropertyEditor实例。如果你恰好在一个共享的FormattingConversionService中也有一个个基于Formatter的设置(setup),这会非常用,同样的规则可以用重用于控制器指定的绑定规则的变化:

@Controller
public class MyFormController 
{
    @InitBinder
    protected void initBinder(WebDataBinder binder) 
    {
        binder.addCustomFormatter(new DateFormatter("yyyy-MM-dd"));
    }
    // ...
}

② 配置一个自定义的WebBindingInitializer

  为了表达(externalize)数据绑定初始化,你可以提供一个自定义的WebBindingInitializer接口实现,然后你可以通过为RequestMappingHandlerAdapter来提供一个自定义 Bean 配置来启动WebBindingInitializer,所以要重写默认配置。

  下面的例子来自 PetClinic 应用程序(虽然文档上说了一下,可我也不知道这个项目在哪里……),展示了一个配置,使用一个自定义WebBindingInitializer接口实现——org.springframework.samples.petclinic.web.ClinicBindingInitializer,它配置的PropertyEditors需要几个控制器。

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
    <property name="cacheSeconds" value="0"/>
    <property name="webBindingInitializer">
        <bean class="org.springframework.samples.petclinic.web.ClinicBindingInitializer"/>
    </property>
</bean>

  @InitBinder方法也可以定义在一个带有@ControllerAdvice注解的类中,在这种情况下,它们用于匹配控制器。这提供了一个使用WebBindingInitializer的代替方法。详情见“使用@ControllerAdvice@RestControllerAdvice通知控制器一节”。

最后

以上就是典雅悟空为你收集整理的 3.13、@InitBinder 和 WebDataBinder的全部内容,希望文章能够帮你解决 3.13、@InitBinder 和 WebDataBinder所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部