当前位置: 首页 > 知识库问答 >
问题:

将freemarker模板写入字符串输出

麻书
2023-03-14

我想有一个字符串的freemarker模板输出。我有一个freemarker模板文件commonTemplate。ftl。

<div>
    <div>
        <h1>${userDetails.name}</h1>
        ${userDetails.birthday}  ${userDetails.id}
    </div>
</div>

Java代码填充模型并将输出打印到控制台App.java.

public class App {

    private Service service = new Service();


    public void execute() {
        Configuration configuration = prepareConfiguration();
        // Load templates from resources/templatess.
        configuration.setClassForTemplateLoading(App.class, "/templates");

        try {
            Template template = configuration.getTemplate("commonTemplate.ftl");

            // Console output
            Writer out = new OutputStreamWriter(System.out);
            template.process(prepareData(), out);
            out.flush();

        } catch (IOException | TemplateException e) {
            throw new RuntimeException(e);
        }
    }

    private Configuration prepareConfiguration() {
        Configuration configuration = new Configuration(Configuration.VERSION_2_3_23);
        configuration.setDefaultEncoding("UTF-8");
        configuration.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
        configuration.setLogTemplateExceptions(false);
        return configuration;
    }

    private Map<String, Object> prepareData() {
        Model model = service.getModel();
        Map<String, Object> data = new HashMap<String, Object>();
        data.put("userDetails", model.getUserDetails());
        return data;
    }
}

它适用于控制台输出。

<div>
    <div>
        <h1>john Doe</h1>
        1990-01-10T12:11+01:00[Europe/Prague]  1
    </div>
</div>

共有2个答案

丁阎宝
2023-03-14
    try {
        Template template = configuration.getTemplate("commonTemplate.ftl");
        Writer out = new StringWriter();
        template.process(prepareData(), out);
        System.out.println(out.toString());

    } catch (IOException | TemplateException e) {
        throw new RuntimeException(e);
    }
闻人嘉颖
2023-03-14

希望这行得通。

// write the freemarker output to a StringWriter 
StringWriter stringWriter = new StringWriter();
template.process(prepareData(), stringWriter);

// get the String from the StringWriter
String string = stringWriter.toString();
 类似资料:
  • 我有几个输出侦听器正在实现。它可以是写到stdout或文件的,也可以是写到内存或任何其他输出目标;因此,我在方法中指定作为(an)参数。 现在,我收到了。在这里向流写入的最佳方式是什么? 我应该只使用吗?我可以给它字节,但如果目标流是字符流,那么它会自动转换吗? 我需要用这里的一些桥流来代替吗?

  • 问题内容: 我有几个正在实现OutputStream的输出侦听器。它可以是写到stdout或文件的PrintStream,也可以写到内存或任何其他输出目标。因此,我在方法中将OutputStream指定为参数。 现在,我已经收到了字符串。在此处写入流的最佳方法是什么? 我应该只使用Writer.write(message.getBytes())吗?我可以给它提供字节,但是如果目标流是字符流,那么它

  • 我正在使用与Freemarker启动的Spring Boot。 给定以下字符串: 我试图对这个字符串执行一些验证,以确保它包含正确的Freemarker语法。 ----提示:如果已知失败的表达式在法律上引用了有时为null或缺少的内容,可以指定默认值,如myoptionalvar!mydefault,或者使用<#If myoptionalvar??>when-present<#else>when-

  • 问题内容: 是否可以将模板字符串创建为常规字符串 然后将其转换为模板字符串 没有,以及其他动态代码生成方式? 问题答案: 由于您的模板字符串必须动态地(在运行时)引用该变量,因此答案是: 否,没有动态代码生成是不可能的。 但这很简单:

  • 所以我们将html存储在数据模型中。我需要将其输出到freemarker模板中: 例子: 我尝试过[#noescape],但它抛出了一个错误,说没有逃逸障碍。请参阅FREEMARKER:避免转义HTML字符。这个解决方案对我不起作用。