3.4 SpringMVC集成
About 1514 wordsAbout 5 min
2021-03-27
3.4 SpringMVC集成
适用于Spring 6+JDK17
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl-spring</artifactId>
<version>3.14.1.RELEASE</version>
</dependency>适用于Spring 5以下
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl-spring-classic</artifactId>
<version>3.14.1.RELEASE</version>
</dependency>https://gitee.com/xiandafu/beetl/tree/master/beetl-classic-integration 包含了集成源码和集成测试例子
https://gitee.com/xiandafu/beetl/tree/master/beetl-integration 包含了JDK17的Spring集成源码和测试例子
3.4.1 普通集成
Srping5 需要做如下配置即可包名是org.beetl.ext.spring6)
<bean id="beetlConfig" class="org.beetl.ext.spring6.BeetlGroupUtilConfiguration" init-method="init"/>
<bean id="viewResolver" class="org.beetl.ext.spring6.BeetlSpringViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>或者Spring5以下(包名是org.beetl.ext.spring)
<bean id="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init"/>
<bean id="viewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>同其他集成方式一样,模板的配置将放在beetl.properties中。
如果想获取GroupTemplate,可以调用如下代码
BeetlGroupUtilConfiguration config = (BeetlGroupUtilConfiguration) this.getApplicationContext().getBean("beetlConfig");
GroupTemplate group = config.getGroupTemplate();Controller代码如下:
@RequestMapping(value = "/", method = RequestMethod.GET)
public ModelAndView index(HttpServletRequest req) {
ModelAndView view = new ModelAndView("/index");
//total 是模板的全局变量,可以直接访问
view.addObject("total",service.getCount());
return view;
}http://git.oschina.net/xiandafu/springbeetlsql 有完整例子
通常可以把模板放到WEB-INF目录下,除了可以配置beetl.propertis 外,还可以使用Spring配置
<bean id="beetlConfig" class="org.beetl.ext.spring." init-method="init">
<property name="root" value="/WEB-INF/templates"/>
</bean>3.5 高级集成
spring集成还允许注册被spring容器管理的Function,Tag等,也允许配置多个视图解析器等功能
<bean name="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
<property name="configFileResource" value="/WEB-INF/beetl.properties"/>
<property name="functions">
<map>
<entry key="testFunction" value-ref="testFunction"/>
</map>
</property>
<property name="functionPackages">
<map>
<entry key="fp" value-ref="testFunctionPackage"/>
</map>
</property>
<property name="tagFactorys">
<map>
<entry key="html.output" value-ref="testTagFactory"/>
<entry key="html.output2" value-ref="testTagFactory2"/>
</map>
</property>
</bean>
<bean name="testTagFactory" class="org.beetl.ext.spring.SpringBeanTagFactory">
<property name="name" value="testTag"/>
</bean>
<bean name="testTagFactory2" class="org.beetl.ext.spring.SpringBeanTagFactory">
<property name="name" value="testTag2"/>
</bean>
<bean name="beetlViewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
<property name="config" ref="beetlConfig"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
</bean>如上图所示,BeetlGroupUtilConfiguration有很多属性,列举如下
- configFileResource 属性指定了配置文件所在路径,如果不指定,则默认在classpath下
- functions 指定了被spring容器管理的function,key为注册的方法名,value-ref 指定的bean的名称
- functionPackages,指定了被spring容器管理的functionPackage,key为注册的方法包名,value-ref 指定的bean的名称
- tagFactorys ,注册tag类,key是tag类的名称,value-ref指向一个org.beetl.ext.spring.SpringBeanTagFactory实例,该子类是一个Spring管理的Bean。属性name对应的bean就是tag类。需要注意,由于Tag是有状态的,因此,必须申明Scope为 "prototype"。如代码:
@Service
@Scope("prototype")
public class TestTag extends Tag {
}- typeFormats: 同functions,参数是
Map<Class<?>, Format>,其中key为类型Class - formats:同functions,参数是
Map<String, Format>,其中key为格式化函数名 - virtualClassAttributes 同functions,参数
Map<Class<?>, VirtualClassAttribute>,其中key为类型Class - virtualAttributeEvals ,类型为
List<VirtualAttributeEval> - resourceLoader,资源加载器 ,值是 实现ResourceLoader的一个Bean
- errorHandler ,错误处理,值是实现ErrorHandler的一个Bean
- sharedVars,同functions,类型是
Map<String, Object>,可以在此设置共享变量 - configProperties,类型是Properties,可以覆盖配置文件的某些属性
如下配置,指定了三个视图解析器,一个用于beetl页面渲染,一个用于cms,采用了beetl技术,另外一个是一些遗留的页面采用jsp
<bean name="beetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
<property name="configFileResource" value="/WEB-INF/beetl.properties"/>
</bean>
<bean name="cmsbeetlConfig" class="org.beetl.ext.spring.BeetlGroupUtilConfiguration" init-method="init">
<property name="configFileResource" value="/WEB-INF/cms-beetl.properties"/>
</bean>
<!-- Beetl视图解析器1 -->
<bean name="beetlViewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
<!-- 多视图解析器,需要设置viewNames和order -->
<property name="viewNames">
<list>
<value>/template/**</value>
</list>
</property>
<property name="suffix" value=".btl"/>
<property name="contentType" value="text/html;charset=UTF-8"/>
<property name="order" value="0"/>
<!-- 多GroupTemplate,需要指定使用的bean -->
<property name="config" ref="beetlConfig"/>
</bean>
<!-- Beetl视图解析器2 -->
<bean name="cmsBeetlViewResolver" class="org.beetl.ext.spring.BeetlSpringViewResolver">
<!-- 多视图解析器,需要设置viewNames和order -->
<