我正在使用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的模型,这将是我最喜欢的。
如果有人也可以在这种情况下对模型和参数的差异说几句话,这将是另外有用的!
答案 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