2012-12-17 48 views
1

有时候,我不得不使用下面的代码片段:如何检查Freemarker模板的存在性之前,包括它

<#include 'some.ftl' /> 

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

<#include_if_exists 'some.ftl' > 

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

+0

更多的讨论在这里:http://stackoverflow.com/questions/2630942/in-freemarker-is-it-it-it-check-if-a-file-exists-before-including-i – tobinibot

回答

4

好的。通过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!"); 
     } 
    } 
    } 

} 
+0

+1非常好,这个作品! –