繁体   English   中英

如果值为空,则保留 FreeMarker 标记

[英]Preserving FreeMarker Markup if value is null

所以我目前正试图弄清楚如果提供的数据模型不包含该值,是否还有保留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库中的功能来做到这一点? 我可以通过模式匹配来做到这一点,但必须有更简单的方法。

谢谢。

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

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();
            }
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM