如何在包含之前检查freemarker模板的存在

时间:2012-12-17 05:39:35

标签: freemarker

有时我必须使用以下代码段:

<#include 'some.ftl' />

freemarker是否有指令返回some.ftl的存在?

喜欢

<#include_if_exists 'some.ftl' > 

或者我可以自己实施这样的指令吗?

2 个答案:

答案 0 :(得分:4)

行。由user-directive

解决

[@include template ='some.ftl'/]

警告如果找不到模板......

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 :(得分:0)

<#attempt>
<#recover>
</#attempt>

声明应该可以解决问题。

在此查看http://freemarker.sourceforge.net/docs/ref_directive_attempt.html以获取更多信息。