【发布时间】:2014-04-10 13:09:34
【问题描述】:
我正在尝试创建两个单独的 freemarker 配置实例。我有这样的抽象类
public abstract class AbstractFreemarkerConfiguration {
Logger logger = LoggerFactory.getLogger(AbstractFreemarkerConfiguration.class);
Configuration cfg = new Configuration();
public AbstractFreemarkerConfiguration() throws IOException, TemplateModelException {
logger.info("Initializing Freemarker Config");
cfg.setDefaultEncoding("UTF-8");
setTemplateExceptionHandler();
cfg.setSharedVariable("layout", getLayoutDirectives());
cfg.setTemplateUpdateDelay(0);
cfg.setLocalizedLookup(false);
}
@Autowired
@Qualifier("databaseTemplateLoader")
public void setTemplateLoader(TemplateLoader loader){
logger.info("Setting hibernate teplate loader");
cfg.setTemplateLoader(loader);
}
public abstract void setTemplateExceptionHandler();
}
然后我有两个这样的课程
@Component("freemarkerProcessor")
public class FreemarkerTemplateProcessor extends AbstractFreemarkerConfiguration implements TemplateProcessor {
public FreemarkerTemplateProcessor() throws IOException, TemplateModelException {
super();
}
private Environment process(Object template) {
Writer writer = new NullWriter();
//do stuff
}
@Override
public List<String> getIncludes(Object template) {
//do stuff
}
@Override
public void setTemplateExceptionHandler() {
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
}
}
和第二个基本相同,只是将 Template Exception Handler 设置为 RETHROW_HANDLER
我的问题是,当我这样做时,我在 IGNORE HANDLER 中遇到异常,它将通过 RETHROW 而不是忽略它。
在调试中,我确定我必须分离 Configuration 和 TemplateExpetionHandler 的实例,所以我不知道为什么会出现 IGNORE HANDLER 异常。
是否有一些全局配置设置或我不知道的东西?
感谢您的回复。
【问题讨论】:
-
您看到的是什么类型的异常? TemplateExceptionHandler 只处理 TemplateException 的实例。
-
关于模型中缺少数据的 TemplateException。
-
不,
TemplateExceptionHandler没有全局缓存等。您是否也尝试过在第一个实例中使用 IGNORE_HANDLER ?因为如果随后行为发生变化,则证明 (1) IGNORE_HANDLER 正在按预期工作,并且 (2) 您出于某种原因正在使用第一个 cfg,而您正在使用第二个。
标签: java spring freemarker