1

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

 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 内部进行评估。在 Grails 2.0 中似乎不再需要它。这是因为改变/改进了 Groovy 功能​​吗?简而言之,我试图了解 Grails 的不同之处在于,不再需要传递在 GSP 内部进行评估的消息,以及在哪里可以利用 Grails 2.0 中的这种差异/变化。

谢谢,雷

4

1 回答 1

1

我认为第二种(Grails 2.0)方式更干净一些。由于这两种选择基本上都评估为相同的字符串,因此在 GString 中评估的第一个似乎没有任何值。它是一个 GString 的事实意味着它将执行额外的表达式 (${...}) 处理(因此会稍微慢一些),而 Grails 2.0 版本只是直接进入消息标记库。

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

于 2011-11-04T15:26:18.177 回答