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