在Grails 1.3.7中,默认 Controller 将为域类的save操作中的Flash消息显示生成如下代码(请注意分配的开始,即“$ {):
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的这种差异/变化。
谢谢,雷
最佳答案
我认为第二种方法(Grails 2.0)比较干净。由于这两种选择实际上都评估同一个String,因此在GString中评估的第一个似乎没有任何值。它是GString的事实意味着它将进行额外的表达式($ {...})处理(因此会稍慢一些),而Grails 2.0版本直接进入了消息标签库。
不知道为什么它最初是用第一种方法完成的...顺便说一句,我不认为GString内部的代码是在GSP处理过程中评估的-它是在将GString分配给 Controller 中的flash.message时评估的(与Grails 2.0版本相同)...
关于grails - grails 2.0 vs 1.3.7,flash.message和gsps的工作方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966752/