【问题标题】:Groovy Templates - Non Standard Parameters, with minus signsGroovy 模板 - 非标准参数,带减号
【发布时间】:2018-04-05 17:27:29
【问题描述】:

我正在尝试渲染具有包含减号的键的地图(例如first-name)。这是我正在尝试渲染的示例模板:

String text = "Dear \"$first-name $lastname\",\nSo nice to meet you";

当我使用 Groovy 模板引擎(可以是 SimpleTemplateEngineMarkupTemplateEngine)渲染它时,它会抱怨并抛出异常。当我从变量名中删除“-”时,它可以正常工作。

有没有办法在 Groovy 模板文本中转义这些变量?

顺便说一句 - 我这样做的原因是从 3rd 方 API 呈现 JSON blob。

【问题讨论】:

    标签: templates groovy template-engine


    【解决方案1】:

    至少有一种方法可以做到这一点。它不适用于您的情况,原因与您不能在变量名中使用 - 字符相同。当您定义如下表达式时:

    ${first-name}
    

    Groovy 将其视为:

    ${first.minus(name)}
    

    这就是它抛出异常的原因:

    Caught: groovy.lang.MissingPropertyException: No such property: first for class: SimpleTemplateScript1
    groovy.lang.MissingPropertyException: No such property: first for class: SimpleTemplateScript1
        at SimpleTemplateScript1.run(SimpleTemplateScript1.groovy:1)
    

    您可以在绑定中保留 first-name 之类的键,但您必须将它们放在映射中,以便您可以使用 Map.get(key) 函数访问 first-name 值。考虑以下示例:

    import groovy.text.SimpleTemplateEngine
    
    def engine = new SimpleTemplateEngine()
    def bindings = [
            'first-name': 'Test',
            'lastname': 'qwe'
    ]
    
    String text = 'Dear "${map["first-name"]} ${map["lastname"]}",\nSo nice to meet you'
    
    println engine.createTemplate(text).make([map: bindings])
    

    在此示例中,我将绑定放入带有键 map 的映射中。当我这样做时,我可以以map['first-name']map['lastname'] 访问我的绑定。运行此示例会产生预期的输出:

    Dear "Test qwe",
    So nice to meet you
    

    希望对你有帮助。

    【讨论】:

    • 这太棒了!它有效:) 还有一个后续问题。我正在尝试使用 MarkupTemplateEngine 完成外部文件,但似乎不喜欢它。例如:title("Fitbit 用户资料 - ${map[user].fullName}")
    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多