如何在包含freemarker模板之前检查其是否存在 [英] How to check the existense of a freemarker template before include it

查看:381
本文介绍了如何在包含freemarker模板之前检查其是否存在的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Sometimes I have to use the following snippet :

<#include 'some.ftl' />

freemarker是否具有返回some.ftl的existense的指令?

Does freemarker have a directive that return the existense of some.ftl ?

<#include_if_exists 'some.ftl' > 

或者我可以自己执行这样的指令吗?

Or can I implement such a directive by myself?

推荐答案

确定.由用户指令

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

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

如果未找到模板,则警告...

WARN if template not found...

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!");
      }
    }
  }

}

这篇关于如何在包含freemarker模板之前检查其是否存在的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆