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}"/>

Область флеш-памяти очищается в конце следующего запроса, что может объяснить, почему вы все еще видите сообщение на следующей странице.

Другие вопросы по тегам