Grails - 自定义Flash.message呈现

时间:2012-08-01 04:47:55

标签: grails error-handling gorm grails-controller flash-message

我正在运行查询以检查多个帐户ID是否存在实体ID。如果结果集不为null,那么我需要抛出错误或显示flash消息。

该方法的代码如下:

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)
}

在我看来,我以下列方式呈现flash消息和错误:

<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.

当我运行此代码时,flash消息显示为我传递的字符串,即“test.not.created.message”。此外,只要我导航到显示flash.message的任何其他页面,就会传递此字符串以显示。 我是grails and groovy的新手,非常感谢任何帮助。

谢谢!

2 个答案:

答案 0 :(得分:2)

然后出现2​​个问题:

1 - 未从message.properties中检索邮件:

您的项目中必须有其他message.properties文件。给它一张支票。因为如果找不到它,grails会显示代码本身而不是消息,因为它没有找到。也许它正在其他属性文件中查找您的消息,例如您的Locale特有的(例如:pt_BR或en_US)。除此之外,你正在使用消息(代码:...)构造。

2 - 您的Flash消息不会消失:

使用request.message。

而不是flash.message

答案 1 :(得分:0)

我认为您要关注的示例是here

您只需要在控制器或视图中解析一次消息。

所以在控制器中:

flash.message = "test.not.created.message"
flash.args = ["SAMLInfo"]
flash.default = "<default text>"

在视图中:

<g:message code="${flash.message}" args="${flash.args}"
           default="${flash.default}"/>

flash scope is cleared at the end of the next request可以解释为什么您仍会在下一页上看到该消息。