springboot使用freemarker <#global I18n = I18nUtil.getMultString()?eval />定义全局变量的完整实现
时间: 2024-11-30 07:18:46 浏览: 19
Spring Boot 使用 FreeMarker 模板引擎时,若想在模板全局范围内定义变量,通常会通过配置 `Thymeleaf` 或者自定义 FreeMarkerConfigurer 实现。这里假设你已经集成 Thymeleaf,并且有一个 `I18nUtil` 工具类用于获取国际化字符串。
首先,你需要在 Spring 配置文件中(如 application.properties 或 application.yml)设置 FreeMarker 的配置:
```properties
spring.thymeleaf.templateEngine.type=freeMarker
spring.freemarker.config.location=classpath:/templates/freemarker-config.xml
```
然后创建一个 `freemarker-config.xml` 文件,定义全局变量:
```xml
<configuration>
<variable name="I18n" expression="${T(I18nUtil).getMultString()}" />
</configuration>
```
在这个例子中,`expression` 属性引用了 `I18nUtil` 的 `getMultString()` 方法来动态加载多语言字符串。
在你的 Thymeleaf 模板文件(例如 layout.html)里,你可以直接使用 `<#global>` 标签访问这个全局变量:
```html
<!DOCTYPE html>
<html th:fragment="content">
<div th:text="${I18n.message}"></div> <!-- 这里的 message 是你在 I18nUtil 中定义的键 -->
</html>
```
最后,在控制器或其他服务类中,确保 `I18nUtil` 被初始化并可用:
```java
@Autowired
private I18nUtil i18nUtil;
// 在需要的地方调用 getMultString()
String globalMessage = i18nUtil.getMultString().message;
```
阅读全文