一、增加Maven依赖包
<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetl-framework-starter</artifactId> <version>1.2.40.Beetl.RELEASE</version> </dependency>
二、新建一个Config文件,用来配置Beetl,代码如下:
package com.wanma.framework_web.config;
import org.beetl.core.resource.ClasspathResourceLoader;
import org.beetl.ext.spring.BeetlGroupUtilConfiguration;
import org.beetl.ext.spring.BeetlSpringViewResolver;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 参考文档:
* /2175.html
*/
@Configuration
public class BeetlConf { //【特别注意1】此类不能命名为 BeetlConfig,因为它已被Beetl底层占用了,会冲突!
@Bean(name = "beetlConfig") //【特别注意2】此Bean必须命名为 beetlConfig,方便在BeetlHelper类中,Spring以单例的方式自动找到BeetlGroupUtilConfiguration的实例
public BeetlGroupUtilConfiguration getBeetlGroupUtilConfiguration() {
String templatesPath = "/templates";
BeetlGroupUtilConfiguration beetlGroupUtilConfiguration = new BeetlGroupUtilConfiguration();
// 获取Spring Boot 的ClassLoader
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (loader == null) {
loader = BeetlConf.class.getClassLoader();
}
// 额外的配置,可以覆盖默认配置,但一般不需要
// ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
// 自定义配置文件路径:/resources/config/beetl.properties
// Resource beetlResource = resolver.getResource("classpath:config//beetl.properties");
// beetlGroupUtilConfiguration.setConfigFileResource(beetlResource);
ClasspathResourceLoader cploder = new ClasspathResourceLoader(loader, templatesPath);
beetlGroupUtilConfiguration.setResourceLoader(cploder);
beetlGroupUtilConfiguration.init();
// 如果使用了优化编译器,涉及到字节码操作,需要添加ClassLoader
beetlGroupUtilConfiguration.getGroupTemplate().setClassLoader(loader);
return beetlGroupUtilConfiguration;
}
@Bean(name = "beetlViewResolver")
public BeetlSpringViewResolver getBeetlSpringViewResolver(@Qualifier("beetlConfig") BeetlGroupUtilConfiguration beetlGroupUtilConfiguration) {
BeetlSpringViewResolver beetlSpringViewResolver = new BeetlSpringViewResolver();
// 上面已经设置了全局路径了:String templatesPath = "/templates",下面的路径前缀就不用设置了
// beetlSpringViewResolver.setPrefix("/templates");
// 模板文件后缀,默认为.btl,这里改为.html
beetlSpringViewResolver.setSuffix(".html");
// 这个一般会在模板文件中指定编码为UTF-8
// beetlSpringViewResolver.setContentType("text/html;charset=UTF-8");
beetlSpringViewResolver.setOrder(0);
beetlSpringViewResolver.setConfig(beetlGroupUtilConfiguration);
return beetlSpringViewResolver;
}
}
这里需要注意一下:
1、如果缺少beetlGroupUtilConfiguration.init(),会抛出异常。
2、如果直接使用beetlSpringViewResolver.setPrefix()定义模板路径,会有警告,这个可以看一下BeetlSpringViewResolver的源码:
public void setPrefix(String prefix) {
this.logger.warn("Beetl不建议使用使用spring前缀,会导致include,layout找不到对应的模板,请使用beetl的配置RESOURCE.ROOT来配置模板根目录");
super.setPrefix(prefix);
}
3、新建了一个beetl.properties,但是将它放在了resources/config目录中,所以代码中指定了配置文件的路径。
4、如果缺少beetlSpringViewResolver.setSuffix(".html"),会找不到模板。之前查资料,应该有缺省配置,可是实际使用的时候却不是这样,所以还是加上为妙。
beetl.properties的配置,目前为空,预留以后自定义配置使用,具体选项参考官方文档:
https://www.kancloud.cn/xiandafu/beetl3_guide/2138945
三、测试配置的效果
1、新建 控制器类:
@Controller
@RequestMapping("test")
public class TestController {
@GetMapping("test")
public String getTest(Model model) {
model.addAttribute("userName", "test1");
return "/test"; // 注意:新版不需要增加模板文件后缀名(.html)了
}
}
2、新建 模板文件:
<!DOCTYPE html>
<html>
<head>
<title>测试</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<div class="dialog">
<p>${userName}</p>
</div>
</body>
</html>
3、输出:
test1
四、新建一个BeetlHelper助手类,方便在业务类(非控制器类)中使用
package com.wanma.framework_web.helper;
import org.beetl.core.Template;
import org.beetl.core.exception.BeetlException;
import org.beetl.ext.spring.BeetlGroupUtilConfiguration;
import java.util.Map;
/**
* BeetlHelper 助手类
*/
public class BeetlHelper {
public static BeetlGroupUtilConfiguration groupTemplate = SpringContextHelper.getBean(BeetlGroupUtilConfiguration.class);
/**
* 解析模板
*/
public static String parseTpl(String tplName, Map<String, Object> params) {
String html = "";
Template tpl;
try {
tpl = groupTemplate.getGroupTemplate().getTemplate(tplName + ".html");
tpl.binding(params);
html = tpl.render();
} catch (BeetlException e) {
e.printStackTrace();
}
return html;
}
}
参考: