有时候,我不得不使用下面的代码片段:如何检查Freemarker模板的存在性之前,包括它
<#include 'some.ftl' />
的freemarker是否有返回some.ftl的存在性指令?
像
<#include_if_exists 'some.ftl' >
或者我可以自己实现这样的指令?
有时候,我不得不使用下面的代码片段:如何检查Freemarker模板的存在性之前,包括它
<#include 'some.ftl' />
的freemarker是否有返回some.ftl的存在性指令?
像
<#include_if_exists 'some.ftl' >
或者我可以自己实现这样的指令?
好的。通过user-directive
[@include模板= 'some.ftl'/]
WARN如果没有找到模板解决...
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import freemarker.core.Environment;
import freemarker.template.Template;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
public class FreemarkerIncludeDirective implements TemplateDirectiveModel {
private static final Logger logger = LoggerFactory.getLogger(FreemarkerIncludeDirective.class);
@Override
public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
if (params.containsKey("template")) {
String t = params.get("template").toString();
try {
Template template = env.getTemplateForImporting(t);
env.include(template);
} catch (FileNotFoundException e) {
logger.warn(t + "not found!");
}
}
}
}
+1非常好,这个作品! –
的
<#attempt>
<#recover>
</#attempt>
声明应该做的伎俩。
请看这里http://freemarker.sourceforge.net/docs/ref_directive_attempt.html了解更多信息。
这不是一个好的解决方案,因此这种方法会捕获每一个错误。 – jackalope
更多的讨论在这里:http://stackoverflow.com/questions/2630942/in-freemarker-is-it-it-it-check-if-a-file-exists-before-including-i – tobinibot