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

时间:2010-09-28 08:12:05

标签: grails model map params gsp

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

我知道我只能使用GSP中的${itemName}来访问myModel地图的每个项目。但是,由于我有时想像'item'+i那样动态构建项目名称,我需要有一些周围的方法来访问变量。

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

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

如果有人也可以在这种情况下对模型和参数的差异说几句话,这将是另外有用的!

3 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:3)

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

所以你可以使用它:

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

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

答案 2 :(得分:0)

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

请参阅:http://grails.github.io/grails-doc/latest/ref/Tags/fieldValue.html