【问题标题】:Velocity template variable name with a special character - a dot带有特殊字符的 Velocity 模板变量名称 - 一个点
【发布时间】:2014-07-16 09:37:39
【问题描述】:

我需要访问 Velocity 模板的变量值:

$myFeature.enabled

注意名称中的。在代码中定义为:

myFeature.enabled=true

问题是,当我想使用 html 上下文获取该变量的值时,使用以下表达式:

'${myFeature.enabled}'

它没有解决,只是给出:

"${myFeature.enabled}"

我试图用 \ 转义点或将撇号更改为 " 但没有运气。

由于各种原因,将变量名称更改为不带点的名称并非易事,因此请提出任何其他解决方案

【问题讨论】:

    标签: java javascript velocity


    【解决方案1】:

    答案很简单:

    Velocity variable naming不允许在变量中使用点

    还有here:

    要使用 $SINGLE.VARIABLE.IDENTIFIER.WITH.DOTS 没有反斜杠 必需的。 引擎不会将此类表达式视为变量 被处理,因为 Velocity 变量不能包含点 到速度变量表示法。

    链接:

    【讨论】:

      【解决方案2】:

      根据Velocity variable notation,变量不能包含点。

      【讨论】:

        【解决方案3】:

        解决此问题的方法是将速度上下文本身添加到上下文中:

        VelocityContext context = new VelocityContext();
        context.put("globals", context); // <-- TADA
        context.put("myFeature.enabled", Boolean.TRUE);
        // ...
        

        然后从模板中,做:

        #if ($globals.get('myFeature.enabled'))
        ...
        #end
        

        【讨论】:

        • 这是一个很好的解决方法。它非常好,几乎可以保证要求 Velocity 始终将一些特殊的键名绑定到上下文本身,但是没有任何可以发明的神奇名称可能不会与任何其他现有代码冲突。
        猜你喜欢
        • 2012-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-14
        • 1970-01-01
        • 2020-03-22
        • 2021-03-29
        相关资源
        最近更新 更多