beetl
- 官网文档:https://www.kancloud.cn/xiandafu/beetl3_guide/1992542
- 语法类vue,一般的字符串填充只要 ${value}就可以了,但是没有vfor啥的。
- 简单易用,不需要过多的研究模板语法就可以使用模板
- 有严格mvc模式,即不在模板里做计算,不使用高级用法仅保留单纯的模板填充和for if流程语句
工具类
@Slf4j
/**
* beetl模板引擎封装类,使用严格mvc框架,模板只做字符填充,不做任何形式的计算
* templateName为放在Resource/template下有模板文件名
*/
public class TemplateUtil {
private static final Configuration cfg = getDefaultConfiguration();
/**
*
* @param templateName 模板名,文件需要放在template目录下
* @param param 模板参数
* @return 渲染后的字符串
*/
public static String rendByTemplateName(String templateName, Map<String,Object> param){
ClasspathResourceLoader resourceLoader = new ClasspathResourceLoader("template/");
GroupTemplate gt = new GroupTemplate(resourceLoader, cfg);
Template template = gt.getTemplate(templateName);
template.binding(param);
final BeetlException validate = template.validate();
if(Objects.nonNull(validate)){
log.error("模板渲染校验失败,{}",validate.detailCode);
return null;
}
return template.render();
}
//字符串模板渲染
public static String rentByString(String templateStr, Map<String,Object> param){
StringTemplateResourceLoader stringTemplateResourceLoader = new StringTemplateResourceLoader();
GroupTemplate gt = new GroupTemplate(stringTemplateResourceLoader, cfg);
Template template = gt.getTemplate(templateStr);
template.binding(param);
final BeetlException validate = template.validate();
if(Objects.nonNull(validate)){
log.error("模板渲染校验失败,{}",validate.detailCode);
return null;
}
return template.render();
}
static Configuration getDefaultConfiguration(){
Configuration cfg = null;
try {
cfg = Configuration.defaultConfiguration(); //这个defaultcfg还抛异常我。。。
} catch (IOException e) {
//e.printStackTrace();
return cfg;
}
//严格mvc模式,模板只做字符渲染,不在模板里做任何计算
cfg.setStrict(true);
return cfg;
}
}
顺手写个psvm,没啥问题
var list = List.of("33","22","22");
var strTemplate = "<% for(i in list){ %>" + "it is a ${i} \n" + "<% }%>" ;
var rendStr = TemplateUtil.rentByString(strTemplate,Map.of("list",list));
System.out.println(rendStr);
输出:
it is a 33
it is a 22
it is a 22