Grails 2.0 против 1.3.7, как работают flash.message и gsps - PullRequest
1 голос
/ 01 ноября 2011

В Grails 1.3.7 контроллеры по умолчанию генерируют код, подобный следующему, для отображения флэш-сообщений в действии сохранения для класса домена (просто обратите внимание на начало назначения, то есть «$ {): * 1001»*

 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 в целом.

Спасибо, Рэй

1 Ответ

1 голос
/ 04 ноября 2011

Я думаю, что второй (Grails 2.0) способ немного чище.Поскольку обе альтернативы по существу оценивают одну и ту же строку, кажется, что в первой из них не оценивается значение в GString.Тот факт, что это GString, означает, что он будет выполнять обработку дополнительного выражения ($ {...}) (так будет незначительно медленнее), тогда как версия Grails 2.0 просто идет прямо кmessage taglib.

Не уверен, почему это было сделано первым способом ... Кстати, я не думаю, что код внутри GString оценивается во время обработки GSP - он оценивается во время GStringназначен flash.message в контроллере (одновременно с версией Grails 2.0) ...

...