thymeleaf配置
尽管thymeleaf默认的配置已经可以满足我们大部分的需求,但是,也总有我们需要调节的地方,灵活的配置方式可以体现到一个模板引擎好坏。在第一篇文章中我们提到过ITemplateResolver,thymeleaf基本上大部分配置都在它的子类中实现。
配置模板缓存
默认情况下,thymeleaf已经开启了模板缓存,如果不需要缓存,可以通过下面的方式关闭:
1 2 3 4 |
templateResolver.setCachable(false); //只缓存users目录下的模板 templateResolver.setCacheablePatternSpec().addPattern("/users/*"); |
thymeleaf的缓存默认实现方式由StandardCacheManager提供支持。
配置多个模板解析器
在前面的文章中我们一直都是使用ServletContextTemplateResolver作为例子,不过thymeleaf还定义了其他的模板解析器,例如:ClassLoaderTemplateResolver、FileTemplateResolver、UrlTemplateResolver和StringTemplateResolver,thymeleaf支持同时配置多个模板解析器:
1 2 3 4 5 6 7 8 9 10 11 |
ClassLoaderTemplateResolver classLoaderTemplateResolver = new ClassLoaderTemplateResolver(); //设置模板生效顺序 classLoaderTemplateResolver.setOrder(Integer.valueOf(1)); ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver(servletContext); //设置模板生效顺序 servletContextTemplateResolver.setOrder(Integer.valueOf(2)); //添加模板解析器 templateEngine.addTemplateResolver(classLoaderTemplateResolver); templateEngine.addTemplateResolver(servletContextTemplateResolver); |
当配置了多个模板解析器,出于性能考虑,最好的方式是为每个模板解析器设置解析规则,以便解析器可以快速跳过那些不满足规则的模板。
1 2 3 4 5 6 7 8 9 10 11 |
ClassLoaderTemplateResolver classLoaderTemplateResolver = new ClassLoaderTemplateResolver(); classLoaderTemplateResolver.setOrder(Integer.valueOf(1)); //只解析layout目录下的所有html文件 classLoaderTemplateResolver.getResolvablePatternSpec().addPattern("/layout/*.html"); //只解析menu目录的所有html文件 classLoaderTemplateResolver.getResolvablePatternSpec().addPattern("/menu/*.html"); //使用默认的配置解析模板 ServletContextTemplateResolver servletContextTemplateResolver = new ServletContextTemplateResolver(servletContext); servletContextTemplateResolver.setOrder(Integer.valueOf(2)); |
配置消息解析器
thymeleaf默认使用的类是StandardMessageResolver,用于解析Propertis文件中的内容,例如国际化的时候会用到,它是#{}
操作符的底层实现。
和模板解析器一样,我们可以同时设置多个消息解析器,如果第一个解析器不能正确解析消息,则把这个任务交给第二个解析器,以此类推。
1 |
templateEngine.addMessageResolver(messageResolver); |
配置数据转换服务
在使用模板文件的时候,可能会遇到需要数据转换的时候。thymeleaf的默认实现是StandardConversionService,它是IStandardConversionService的其中一个子类。在模板文件中使用${{ }}
的时候StandardConversionService就会被调用。但是这个类的实现方式相对简单,它只调用了对象的toString()方法。
可以通过下面的方式自定义转换服务:
1 2 3 4 |
IStandardConversionService customConversionService = new CustomConversionService(); StandardDialect dialect = new StandardDialect(); dialect.setConversionService(customConversionService); templateEngine.setDialect(dialect); |
转载请注明:Pure nonsense » 配置thymeleaf