我有一个速度模板,其中有一条线,如下所示:

$person.names.get(0).FullName


问题是,如果names为null,或者get(0)返回null,则将其计算为

$person.names.get(0).FullName


相反,我希望它打印不带引号的“”。有没有一种方法可以配置Velocity以这种方式工作?我不想将我所做的每一件事都包装在

#if (x != null && x.somethingElse != null ...)
    ...
#end


我一直在查看mustache,并且默认情况下它似乎以这种方式工作。

最佳答案

    VelocityContext context = new VelocityContext();
    EventCartridge eventCartridge = new EventCartridge();
    eventCartridge.addReferenceInsertionEventHandler(new ReferenceInsertionEventHandler() {
        public Object referenceInsert(String reference, Object value) {
            if (value == null) {
                return StringUtils.EMPTY;
            } else {
                return value;
            }
        }
    });
    context.attachEventCartridge(eventCartridge);


索引超出范围仍然会出现错误。我觉得没有办法避免这种情况。如果有人能找到解决方法,我会很乐意将其标记为答案。

07-25 22:40