开发学院

您的位置:首页>教程>正文

教程正文

Thymeleaf 3.0教程:15 更多的配置信息(二)

15.2 消息解析器

  我们没有为杂货应用程序明确指定消息解析器实现,正如前面解释的,这意味着使用的实现是org.thymeleaf.messageresolver.StandardMessageResolver对象。

  标准消息解析器(StandardMessageResolver)是IMessageResolver接口的标准实现,但是如果我们愿意,我们可以创建自己的,适应我们应用程序的特定需求。

  Thymeleaf+ Spring集成包默认提供了一个IMessageResolver实现,它使用标准的Spring方法来检索外部化的消息,方法是使用Spring应用程序上下文中声明的消息源beans。

标准消息解析器

  那么标准消息解析器如何在特定模板中查找请求的消息呢?

  如果模板名称是主页,并且位于/WEB-INF/templates/home.html中,并且请求的区域设置是gl_ES,则此解析器将按以下顺序在以下文件中查找消息:

/WEB-INF/templates/home_gl_ES.properties
/WEB-INF/templates/home_gl.properties
/WEB-INF/templates/home.properties

  有关完整的消息解析机制如何工作的更多细节,请参考标准消息解析器类的JavaDoc文档。

配置消息解析器

  如果我们想在模板引擎中添加一个(或多个)消息解析器呢?简单:

// For setting only one
templateEngine.setMessageResolver(messageResolver);

// For setting more than one
templateEngine.addMessageResolver(messageResolver);

  为什么我们想要多个消息解析器?出于与模板解析器相同的原因:消息解析器是有序的,如果第一个解析器无法解析特定的消息,则会询问第二个,然后询问第三个,依此类推。

15.3 转换服务

  转换服务,使我们能够通过双括号语法(${{...}})实际上是标准方言的一个特征,而不是Thymeleaf模板引擎本身的特征。

  因此,配置它的方法是将我们自定义的IStandardConversionService接口实现直接设置到正在模板引擎中配置的标准方言实例中。比如:

IStandardConversionService customConversionService = ...

StandardDialect dialect = new StandardDialect();
dialect.setConversionService(customConversionService);

templateEngine.setDialect(dialect);

  请注意Thymeleaf-spring3和Thymeleaf-spring4包含spring standard方言,并且该方言已经预先配置了IStandardConversionService的实现,该实现将Spring自己的转换服务基础结构集成到Thymeleaf中。