複数のアカウント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に不慣れであり、これについて助けていただければ幸いです。
ありがとう!