Grails - пользовательский рендеринг Flash.message
Я выполняю запрос, чтобы проверить, существует ли идентификатор объекта для нескольких идентификаторов учетных записей. Если набор результатов не является нулевым, то мне нужно либо выдать ошибку, либо отобразить флэш-сообщение.
Код для метода, как показано ниже:
def save() {
def SAMLInfoInstance = new SAMLInfo(params)
def account = Account.get(params?.accountId)
SAMLInfoInstance.setAccount(account)
def samlInfoInstanceList = SAMLInfo.executeQuery("from SAMLInfo " +
" where account.id <> ? " +
" and entityId = ?", [SAMLInfoInstance.accountId, SAMLInfoInstance.entityId])
if (samlInfoInstanceList?.size > 0){
flash.message = message(code: 'test.not.created.message', args: [message(code: 'SAMLInfo.label', default: 'SAMLInfo'), SAMLInfoInstance.entityId])
/*flash.message = "default.not.created.message"
flash.args = ["SAMLInfo", SAMLInfoInstance.entityId]
flash.default = "SAMLInfo cannot be created"
*/
render(view: "create", model: [SAMLInfoInstance: SAMLInfoInstance])
return
}
if (!SAMLInfoInstance.save(flush: true)) {
render(view: "create", model: [SAMLInfoInstance: SAMLInfoInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: 'SAMLInfo.label', default: 'SAMLInfo'), SAMLInfoInstance.entityId])
redirect(action: "list", id: SAMLInfoInstance.account.id)
}
На мой взгляд, я отображаю флеш-сообщение и ошибки следующим образом:
<g:if test="${flash.message}">
<br/>
<div class="message" role="status">
<g:message code="${flash.message}" args="${flash.args}" default="${flash.default}"/>
</div>
<br/>
</g:if>
<br/>
<g:renderErrors bean="${SAMLInfoInstance}" as="list" />
В моем файле message.properties у меня есть следующая строка:
test.not.created.message=The SP url {1} is not allowed for this account. Please enter a different value.
Когда я запускаю этот код, флэш-сообщение отображается в виде строки, которую я передаю как сообщение, т. Е. "Test.not.created.message". Кроме того, эта строка передается для отображения всякий раз, когда я перехожу на любую другую страницу, на которой отображается flash.message. Я новичок в Grails и Groovy и был бы признателен за любую помощь в этом.
Спасибо!
2 ответа
2 проблемы тогда:
1 - сообщение не извлекается из вашего message.properties:
У вас должны быть другие файлы message.properties в вашем проекте. Дайте ему чек. Потому что, если он не найден, Grails показывает сам код вместо сообщения, так как он не нашел его. Возможно, оно ищет ваше сообщение в каком-то другом файле свойств, например, в файле, определенном для вашей локали (например, pt_BR или en_US). Кроме этого, вы делаете это правильно, используя конструкцию сообщения (code:...).
2 - Ваше флеш-сообщение не исчезает:
Вместо flash.message используйте request.message.
Я думаю, что пример, которому вы хотите следовать, здесь.
Вам нужно разрешить сообщение только один раз, т.е. в контроллере или в представлении.
Итак, в контроллере:
flash.message = "test.not.created.message"
flash.args = ["SAMLInfo"]
flash.default = "<default text>"
И в представлении:
<g:message code="${flash.message}" args="${flash.args}"
default="${flash.default}"/>
Область флеш-памяти очищается в конце следующего запроса, что может объяснить, почему вы все еще видите сообщение на следующей странице.