• beetl-spring Beetl的Spring整合扩展(2):Beetl与Spring MVC整合


    二、Beetl与Spring MVC整合

      本章主要介绍通过beetl-spring完成Beetl与Spring MVC整合的功能。和Beetl自带的BeetlSpringViewResolver及BeetlSpringView相比,本项目提供的BeetlViewResolver增强了视图解析器的功能,使多视图解析器各自使用各自的GroupTemplate以使用不同的Beetl配置成为可能。

    2.1 BeetlViewResolver

      BeetlViewResolver是一个Spring MVC视图解析器实现,它具有以下属性,都是可选的:

    参数名 参数类型

    说明

    常规配置属性

     contentType
     String

    用于指定Http响应包Content-Type头

    默认MIME类型为text/html 字符集通过GroupTemplate使用的ResourceLoader的charset推断(如果无法获取则取当前JVM进程的默认字符集)

     prefix,suffix  String

    使用模版path的前缀和后缀 默认都为空字符串

    BeetlView以如下方式进行字符串拼接以得到实际传给Beetl ResourceLoader的模版path:

    path = prefix + viewName + suffix;

    多视图解析器配置属性

     groupTemplate  GroupTemplate

    该视图解析器所使用的GroupTemplate实例

    默认视图解析器会取Spring上下文中唯一的GroupTemplate

    如果Spring上下文中有多个GroupTemplate,该属性必须设置

     order  int

    配置视图解析器的优先级

    值越小优先级越高,默认为0。当Spring上下文中有多个视图解析器时,必须设置

    详情请参见本章2.3小节。

     viewNames  List<String>

    配置若干个带*号通配符表示的视图名表达式,只有视图名匹配其中一个表达式才会被当前视图解析器处理(在多视图解析器的环境下,如果当前视图解析器判定不能处理该视图名,就会让下一个解析器尝试处理)

    默认所有接收到的视图名都被当前视图解析器处理,通常在多视图解析器环境下应该设置。

    2.2 视图名与BeetlView

      BeetlView由BeetlViewResolver根据视图名产生。一般不手工生成该对象(在使用时,BeetlView需要Spring注入一些必须的环境数据)。

      并不是所有的视图名BeetlViewResolver都一定产生BeetlView实例,有两种特殊的情况:

    视图名

    说明
    以"redirect:"为前缀时

    表示重定向,不产生BeetlView渲染模版,而直接通过Servlet的机制返回重定向响应

    redirect:前缀后面的内容为重定向地址,可以采用相对地址(相对当前url),绝对地址(完整的url)

    如果采用/开头的地址,会自动的在前面接上当前Web应用的contentPath,即contentPath为test的Web应用中使用

    redirect:/admin/login.html 实际重定向地址为 ${contentPath}/admin/login.html

    以"forward:"为前缀时

    表示转发,不产生BeetlView渲染模版。而是直接通过Servlet的机制转发请求(关于转发和重定向的区别,请自行查看Servlet API)

    forward:前缀后面的内容为转发地址,一般都是以/开头相对于当前Web应用的根目录

    其他 产生BeetlView渲染模版输出响应

    2.3 Spring多视图解析器配置

      Spring上下文中,如果有多个视图解析器实例存在,会按照视图解析器的order设置从小到大对他们进行排序处理。(这里说的视图解析器主要是说的是UrlBasedViewResolver的实现子类,只有它才支持多视图解析器并存,大部分的Spring视图解析器类都是UrlBasedViewResolver的子类)。

      判断一个视图是否由该视图解析器处理,核心的方法是UrlBasedViewResolver的canHandle(),将视图名传入返回true/false以表示该视图名是否能处理,与上文描述的一样,默认的canHandle()实现是通过比对视图名对viewNames属性设置的视图名匹配表达式来完成的。如果canHandle()返回true,则视图会交给该解析器的resolveViewName()方法以返回对应的View实例,否则交给排在后面的视图解析器处理。

      对Beetl与Spring MVC整合及多视图解析器的配置,请参见beetl-spring-web-example示例

  • 相关阅读:
    MYSQL转MSSQL
    SVN 服务器IP地址变更后客户端的修改
    gridview
    gridview外边距
    Android开发:自定义GridView/ListView数据源
    Android之Adapter用法总结
    collection set
    listview优化
    android应用开发全程实录-你有多熟悉listview
    android模块
  • 原文地址:https://www.cnblogs.com/shishuifox/p/3852864.html
Copyright © 2020-2023  润新知