4

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

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

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

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

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

4

3 回答 3

7

我现在使用${pageScope.getProperty(...)}.

于 2010-09-28T16:11:50.663 回答
3

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

所以你可以使用这个:

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

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

于 2010-09-28T11:54:08.347 回答
0

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

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

于 2015-02-14T02:21:05.007 回答