時々、次のスニペットを使用する必要があります。
<#include 'some.ftl' />
freemarker には some.ftl の存在を返すディレクティブがありますか?
お気に入り
<#include_if_exists 'some.ftl' >
または、そのようなディレクティブを自分で実装できますか?
時々、次のスニペットを使用する必要があります。
<#include 'some.ftl' />
freemarker には some.ftl の存在を返すディレクティブがありますか?
お気に入り
<#include_if_exists 'some.ftl' >
または、そのようなディレクティブを自分で実装できますか?
わかった。ユーザーディレクティブで解決
[@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!");
}
}
}
}
の
<#attempt>
<#recover>
</#attempt>
ステートメントはトリックを行う必要があります。
詳細については、 http://freemarker.sourceforge.net/docs/ref_directive_attempt.htmlを参照してください。