【问题标题】:Double closure fails in GSPGSP 中的双重关闭失败
【发布时间】:2012-01-01 12:19:39
【问题描述】:

在 GSP 文件中,我写了这样的内容:

${tgs.singleGameSheets.find{it.matchnumber==1}.awayPlayer.fullname()}

但我收到以下错误:

org.codehaus.groovy.control.MultipleCompilationErrorsException: 启动失败: C__STS_Projekte_TischtennisManager_grails_app_views_league__showGameSheet_gsp: 49:期待 '}',发现 ')' @ 第 49 行,第 134 列。 heets.find{it.matchnumber==1 })

问题似乎是双重关闭,因为我发现了一个错误报告here

不幸的是,错误报告中的解决方案在标签的开头和结尾都带有%=% 对我不起作用。

对于这种双重封闭问题,还有其他变通方法或解决方案吗?

我正在使用 Grails 1.3.7。

【问题讨论】:

    标签: grails closures gsp


    【解决方案1】:

    您可能需要将其分成两行。

    尝试先将查找结果分配给单独的 var

    <% def r = tgs.singleGameSheets.find{it.matchnumber==1} %>
    ${r*.awayPlayer.fullname()}
    

    【讨论】:

    • 很好,它可以工作,但在 'r*' 中没有 *,因为“find”返回单个对象,而不是列表。非常感谢!
    • 酷 - 抱歉,我习惯于经常使用 findAll,* 是我的默认击键 :)
    【解决方案2】:

    我建议首先在控制器中进行这种数据处理,并将尽可能准备好的数据交给视图。

    如果您无法做到这一点,我建议您尝试使用括号:

    ${tgs.singleGameSheets.find{it.matchnumber==1}.awayPlayer.fullname()}
    

    变成

    ${(tgs.singleGameSheets.find{it.matchnumber==1}.awayPlayer.fullname())}
    

    这在过去我不得不做${(someCollection.findAll { someClause })}的场合对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多