grails 2.0 vs 1.3.7,flash.message和gsps的工作方式

时间:2011-11-01 12:53:13

标签: grails grails-2.0

在Grails 1.3.7中,默认控制器将生成如下代码,用于在域类的保存操作中显示flash消息(只需注意分配的开始,即“$ {):( p>

 flash.message = "${message(code: 'default.created.message', args: [message(code: 'issue.label', default: 'Issue'), issueInstance.id])}"

在Grails 2.0中,这将更改为

 flash.message = message(code: 'default.created.message', args: [message(code: 'issue.label', default: 'Issue'), issueInstance.id])

我们可以注意到差异在于作业的开始。在1.3.7中,显然是在gsp内部传递一个字符串,在“gsp compile-time / run-time?”。在Grails 2.0中似乎不再需要它了。这是因为改变/改进了Groovy功能吗?简而言之,我试图了解Grails的不同之处在于,不再需要传递在GSP内部评估的消息,并且可以在Grails 2.0中利用这种差异/变化。

谢谢,Ray

1 个答案:

答案 0 :(得分:1)

我认为第二种(Grails 2.0)方式有点清洁。由于两个替代方案基本上都是针对相同的String进行评估,因此在GString中评估的第一个中似乎没有任何值。事实上它是一个GString意味着它将进行额外的表达式($ {...})处理(因此略微更慢),而Grails 2.0版本直接进入消息taglib。

不确定为什么它最初是以第一种方式完成的......顺便说一句,我不认为GString中的代码是在GSP处理期间进行评估的 - 它是在GString被分配给flash.message时评估的。控制器(与Grails 2.0版本同时)......