1

複数のアカウントIDにエンティティIDが存在するかどうかを確認するためのクエリを実行しています。結果セットがnullでない場合は、エラーをスローするか、フラッシュメッセージを表示する必要があります。

メソッドのコードは次のとおりです。

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に不慣れであり、これについて助けていただければ幸いです。

ありがとう!

4

2 に答える 2

2

次に2つの問題:

1-メッセージはmessage.propertiesから取得されていません:

プロジェクトには他のmessage.propertiesファイルが必要です。チェックしてください。見つからなかった場合、grailsはメッセージではなくコード自体を表示します。これは、コードが見つからなかったためです。ロケールに固有のファイル(例:pt_BRまたはen_US)など、他のプロパティファイルでメッセージを検索している可能性があります。それ以外は、message(code:...)構文を使用して正しく実行しています。

2-フラッシュメッセージが消えない:

flash.messageの代わりに、request.messageを使用してください。

于 2012-08-01T17:01:57.263 に答える
0

あなたが従いたい例はここにあると思います。

メッセージを解決する必要があるのは、コントローラーまたはビューで1回だけです。

したがって、コントローラーでは:

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

そして、ビューで:

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

フラッシュスコープは次のリクエストの終了時にクリアされます。これは、次のページにメッセージが表示される理由を説明している可能性があります。

于 2012-08-01T06:38:41.090 に答える