我想有一个字符串的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>
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);
}
希望这行得通。
// 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字符。这个解决方案对我不起作用。