因此,如果提供的数据模型不包含该值,我目前正在尝试确定是否仍然保留freemarker
标记。我知道${VALUE!"DEFAULTVALUE"}
,但这不适用于FreeMarker标记。
基本上,我正在尝试做的事情是:
${TEST}${1}${2}
如果数据模型设置如下:
Map root = new HashMap();
root.put("1","ONE");
root.put("2","TWO");
当这个应用于Template对象时,会抛出null
错误,因为测试未定义。我想要发生的是,如果TEST
未定义,模板仍应处理成以下内容:
${TEST}ONETWO
有没有办法使用FreeMarker
库中的功能?我可以通过模式匹配来做到这一点,但必须有一个更简单的方法。
感谢。
答案 0 :(得分:2)
尝试将?has_content
用于TEST
,也许这会有所帮助。但我不确定,如果这符合您的要求。
答案 1 :(得分:0)
FreeMarker库允许您编写自定义异常处理程序。
不幸的是,FreeMarker没有提供失败的确切令牌,但您可以从错误消息中解决它。
cfg.setTemplateExceptionHandler(new TemplateExceptionHandler() {
@Override
public void handleTemplateException(TemplateException te, Environment e, Writer writer) throws TemplateException {
try {
String errorString = te.getFTLInstructionStack();
int startIndex = errorString.indexOf('$');
if (startIndex != -1) {
int endIndex = errorString.indexOf('}', startIndex);
if (endIndex != -1) {
writer.write(errorString.substring(startIndex, endIndex + 1));
}
else {
throw te;
}
}
else {
throw te;
}
}
catch (IOException ex) {
ex.printStackTrace();
}
}
});