我正在运行一个查询,以检查多个帐户id是否存在实体id。如果结果集不为空,那么我需要抛出一个错误或显示一条闪烁消息。
该方法的代码如下:
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和groovy的新手,如果有任何帮助,我将不胜感激。
谢谢!
2个问题然后:
1-消息没有从您的消息中检索。属性:
您的项目中必须有其他message.properties文件。给它一张支票。因为如果没有找到,grails会显示代码本身而不是消息,因为它没有找到消息。也许它在其他一些属性文件中查找您的消息,比如特定于您的Locale的文件(例如:pt_BR或en_US)。除此之外,您正在使用消息(代码:…)构造正确地执行此操作。
2-你的闪光信息不会消失:
使用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}"/>
闪烁范围在下一个请求结束时被清除,这可能解释了为什么您仍然在下一页上看到该消息。