1

freemarker因此,如果提供的数据模型不包含该值,我目前正在尝试确定是否有保留标记。我知道${VALUE!"DEFAULTVALUE"},但这不适用于 FreeMarker 标记。

从本质上讲,我想要做的事情是:

${TEST}${1}${2}

如果数据模型设置如下:

Map root = new HashMap();
root.put("1","ONE");
root.put("2","TWO");

将此应用于 Template 对象时,null会引发错误,因为未定义 test。我想要发生的是如果TEST未定义,模板仍应处理为以下内容:

${TEST}ONETWO

有没有办法使用FreeMarker库中的功能来做到这一点?我可以通过模式匹配来做到这一点,但必须有更简单的方法。

谢谢。

4

2 回答 2

2

尝试使用?has_contentfor TEST,也许这会有所帮助。但我不确定这是否符合您的要求。

于 2012-11-20T08:20:54.890 回答
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();
            }
        }
    });
于 2013-11-14T17:34:44.430 回答