如何间接引用grails GSP模型变量,例如通过.get(…)

如何间接引用grails GSP模型变量,例如通过.get(…),grails,model,map,params,gsp,Grails,Model,Map,Params,Gsp,我使用GSP基于MailService插件发送电子邮件。sendMail关闭通过(除其他外)body(视图:…,模型:myModel) 我知道我只需使用GSP中的${itemName}就可以访问myModel映射的每个项目。然而,由于有时我想动态地构建项目名称,比如'item'+I,因此我需要一些周围的方法来访问变量 我已经尝试了${model.get('item'+I)和${params.get('item'+I),但model为null,params为空映射。我也尝试了pageScope,但

我使用GSP基于MailService插件发送电子邮件。sendMail关闭通过(除其他外)
body(视图:…,模型:myModel)

我知道我只需使用GSP中的
${itemName}
就可以访问myModel映射的每个项目。然而,由于有时我想动态地构建项目名称,比如
'item'+I
,因此我需要一些周围的方法来访问变量

我已经尝试了
${model.get('item'+I)
${params.get('item'+I)
,但model为null,params为空映射。我也尝试了pageScope,但尽管我可以通过
${pageScope.itemName
访问项目,但我不能使用
${pageScope.get('item'+I)}
,因为pageScope不是映射

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


如果有人也能在此上下文中对模型和参数的差异说几句话,这将是另外的帮助!

没有“模型”作用域或变量。相反,模型映射中的对象被设置为请求属性,以使它们可供GSP使用。这是一个Spring功能,它可以轻松访问JSP中的变量使用JSTL,由于GSP语法与JSTL非常相似,因此它在Grails中的工作方式相同

所以你可以用这个:

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

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

我现在使用
${pageScope.getProperty(…)}
您可以使用
${fieldValue(bean:book,field:'title')}


请参阅:

听起来和我要查找的完全一样,但它在我的GSP中返回null。我查看了${request.properties},但没有在那里找到项;parameterMap是空的。但是使用${pageScope.item0}我最终在同一GSP中获得了变量。是否mailService没有将模型添加到请求参数中?