【问题标题】:How to reference a grails GSP model variable indirectly e.g. via .get(...)如何间接引用 grails GSP 模型变量,例如通过 .get(...)
【发布时间】:2011-04-18 04:08:32
【问题描述】:

我正在使用 GSP 来发送基于 MailService 插件的电子邮件。 sendMail 关闭通过(其中包括)body(view:..., model:myModel)

我知道我可以在 GSP 中使用 ${itemName} 访问 myModel Map 的每个项目。但是,由于我有时想像'item'+i 那样动态构建项目名称,因此我需要一些周边方法来访问该变量。

我已经尝试过${model.get('item'+i) 和${params.get('item'+i),但模型为空且参数为空地图。我也试过 pageScope,虽然我可以通过${pageScope.itemName 访问一个项目,但我不能使用${pageScope.get('item'+i)},因为 pageScope 不是 Map。

可能有多种解决方案可以解决这个问题;我会很高兴有一个简单的;-)。我看到的一种解决方案是将 myModel 作为唯一参数传递,然后始终使用 myModel.get(...),但这意味着我必须更改所有现有 GSP 以始终引用 myModel 而不是直接访问项目(具有固定名称);所以如果有一种方法我不必更改传递给 GSP 的模型,这将是我的最爱。

如果有人也可以在这种情况下对模型和参数的区别说几句话,这将另外有帮助!

【问题讨论】:

    标签: grails model map params gsp


    【解决方案1】:

    我现在使用 ${pageScope.getProperty(...)} 管理它。

    【讨论】:

      【解决方案2】:

      没有“模型”范围或变量。而是将模型映射中的对象设置为请求属性,以使它们对 GSP 可用。这是 Spring 的一个特性,它使使用 JSTL 访问 JSP 中的变量变得容易,并且由于 GSP 语法与 JSTL 非常相似,因此它在 Grails 中的工作方式相同。

      所以你可以使用这个:

      ${request.getAttribute('item'+i)}
      

      使用动态名称访问模型变量。

      【讨论】:

      • 听起来正是我想要的,但它在我的 GSP 中返回 null。我查看了 ${request.properties} 并没有找到那里的项目;参数映射为空。但是使用 ${pageScope.item0} 我明确地在同一个 GSP 中获得了变量。难道是mailService没有将模型添加到请求参数中?
      【解决方案3】:

      你可以使用${fieldValue(bean: book, field: 'title')}

      见:http://grails.github.io/grails-doc/latest/ref/Tags/fieldValue.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多