【问题标题】:Freemarker escaping freemarkerFreemarker 转义 freemarker
【发布时间】:2010-12-11 02:32:12
【问题描述】:

我正在使用 freemarker 生成一个 freemarker 模板。但我需要一些方法来逃避 freemarker 标签。

如何转义<#list> 标签或${expression}

【问题讨论】:

    标签: freemarker


    【解决方案1】:

    如果您发现 {} 嵌套令人困惑,您也可以使用:${"$"}{expression}

    【讨论】:

    • 迄今为止建议的所有替代方案中最好的。令我难以置信的是,没有更简单的方法,例如\$ - 但没有。这是优雅的足够近似......
    【解决方案2】:

    我正在使用alternative syntax 功能。我以 [#ftl] 开始模板并使用此语法。

    对于表达式,我使用字符串文字功能:${r"${expression}"}

    【讨论】:

    • 我使用了同样的方法,虽然有点难看但是很有效。如果我使用外部模板的变量来定义生成模板的变量的属性访问,它会变得非常讨厌,它看起来像这样: ${r"${entity."}${propertyDescriptor.name}} 并结束鉴于 propertyDescriptor 的名称为“creationDate”,例如 ${entity.creationDate}。
    【解决方案3】:

    您可以将 FreeMarker 配置为使用 [=exp] 而不是 ${exp}(自 2.3.28 起),以及 [#...]/[@...] 而不是 <#...>|<@...>,方法是同时设置 interpolation_syntaxtag_syntax 配置设置为 square_bracket(在 Java API 中:Configuration cfg; ... cfg.setInterpolationSyntax(Configuration.SQUARE_BRACKET_INTERPOLATION_SYNTAX)cfg.setTagSyntax(Configuration.SQUARE_BRACKET_TAG_SYNTAX))。然后语法不会与默认语法冲突。

    有一个棘手的案例;如果模板以<#ftl> 开头,那么它会将标签语法切换回angle_bracket。为了解决这个问题,只需在其前面添加 [#ftl] 行。

    另请参阅:https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html

    【讨论】:

      【解决方案4】:

      如果您想使用非原始字符串来转义双引号、撇号等,您可以执行以下操作:

      假设您想在字符串中使用字符串 ${Hello}-"My friend's friend"。你不能用原始字符串做到这一点。我使用的是:

      ${"\x0024{Hello}-\"My friend's friend\""}
      

      自从我使用双引号以来,我没有转义撇号。

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 1970-01-01
        • 2020-01-17
        • 2016-11-09
        • 2018-11-25
        • 1970-01-01
        • 1970-01-01
        • 2011-08-06
        • 1970-01-01
        相关资源
        最近更新 更多