【问题标题】:How to escape apostrophe using VelocityTemplate如何使用 VelocityTemplate 转义撇号
【发布时间】:2021-02-11 07:06:42
【问题描述】:

希望您能帮助我找出在我的 VTL 语法中转义撇号(单引号)的最佳方法。这是适用于我所有没有撇号的价值观的方法。我尝试添加一个额外的撇号,并在撇号前面尝试了一个反斜杠 - 两者都不起作用。提前感谢您的帮助!

#set($a=${ITEM_STAGING.Item_Gift_Wrap_Price})##
#if (${ITEM_STAGING.Department== "MEN'S DEPARTMENT"})##
#set($a="10.50")
$a##
#else##
$a##
#end##

问题是“MEN”后面的撇号。

提前感谢您的帮助 - 公元前

【问题讨论】:

    标签: java velocity vtl


    【解决方案1】:

    这不是转义问题,而是语法问题。您不应该将条件本身包含在花括号中(并且您在这里不需要任何花括号,请参阅doc)。你应该写:

    #set($a=${ITEM_STAGING.Item_Gift_Wrap_Price})##
    #if ($ITEM_STAGING.Department == "MEN'S DEPARTMENT")##
    #set($a="10.50")
    $a##
    #else##
    $a##
    #end##
    

    仅当您希望在单引号字符串中使用单引号或在双引号字符串中使用双引号时才考虑转义。在这些情况下,最好的方法是双引号,例如:'MEN''S DEPARTMENT'

    【讨论】:

    • 我很欣赏您的意见,但此规则仅适用于存在的大括号。如果我删除那个讨厌的撇号,它也将起作用,这是最后的手段。我试图通过添加一个额外的撇号来逃避,但这没有用。不过,感谢您的尝试。非常感谢您的宝贵时间!
    • @BenjaminC4 “这条规则只适用于那些花括号”是什么意思?您可以删除它们并向我们展示您的代码吗?将 == 放在花括号内不是有效的 Velocity 语法。
    • 您好,再次感谢。当我删除它们时,我使用了您提供的相同语法,并且我的应用程序没有处理该规则。当我添加花括号并使用原始代码,但使用其中没有撇号的部门时,应用程序可以很好地处理规则。例如:#set($a=${ITEM_STAGING.Item_Gift_Wrap_Price})## #if (${ITEM_STAGING.Department== "HOME GOODS"})## #set($a="10.50") $a## # else## $a## #end##
    • 如果我使用你建议的语法,我会得到ERROR org.apache.velocity.parser - template.vtl: Encountered "==" at line 2, column 31。模板甚至没有被解析。如果没有大括号,您可以打印${ITEM_STAGING.Item_Gift_Wrap_Price}${ITEM_STAGING.Item_Gift_Wrap_Price.class.name} 以进行调试吗?
    猜你喜欢
    • 2011-09-23
    • 2016-03-23
    • 2013-07-13
    • 1970-01-01
    • 2018-08-26
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多