我是Grails的新手,我有一个问题对大多数人来说应该很容易。
我有一个显示object
列表的页面。如果删除DataIntegrityViolation
时有object
,我想显示一条消息。我正在做的是:
def delete() {
def instanceToDelete= Myobject.get(params.id)
try {
instanceToDelete.delete(flush: true)
redirect(action: "list", id: params.id)
}
catch (DataIntegrityViolationException e) {
flash.message = "some message"
//I want to refresh the div containing the flash.message here
}
}
以下是应显示flash消息的位置:
<g:if test="${flash.message}">
<div class="alert alert-error" style="display: block">${flash.message}</div>
抱歉 - 我知道这是一个愚蠢的问题,但我真的找不到解决方案。
答案 0 :(得分:19)
flash
对象是存储键/值对的Map
,因此您可以为错误消息定义自己的密钥。例如:
try {
instanceToDelete.delete(flush: true)
flash.message = "successfully deleted object"
}
catch (DataIntegrityViolationException e) {
flash.error = "could not delete object"
}
redirect(action: "list", id: params.id)
然后你可以检查包含flash
密钥的error
对象,并为这种消息使用不同的样式:
<g:if test="${flash.error}">
<div class="alert alert-error" style="display: block">${flash.error}</div>
</g:if>
<g:if test="${flash.message}">
<div class="message" style="display: block">${flash.message}</div>
</g:if>
答案 1 :(得分:3)
这可以帮到你:
def delete() {
def instanceToDelete= Myobject.get(params.id)
try {
instanceToDelete.delete(flush: true)
flash.success = "Object deleted correctly"
} catch (DataIntegrityViolationException e) {
flash.error = "Something goes wrong"
}
redirect(action: "list", id: params.id)
}
在所有代码之后重定向到gsp,如果出现错误或一切顺利,可以存储。
您可以将消息放在不同的变量中,以区分错误和成功。
<g:if test="${flash.success}">
<div class="alert alert-success" style="display: block">${flash.success}</div>
</g:if>
<g:if test="${flash.error}">
<div class="alert alert-error" style="display: block">${flash.error}</div>
</g:if>
答案 2 :(得分:1)
严格答案:只需返回您的消息(或使用模型地图渲染)
为您的控制器:
def delete() {
def instanceToDelete= Myobject.get(params.id)
try {
instanceToDelete.delete(flush: true)
redirect(action: "list", id: params.id)
}
catch (DataIntegrityViolationException e) {
render view:'delete', model:[message: "some message"]
//I want to refresh the div containing the flash.message here
}
}
为你的gsp:
<g:if test="${message}">
<div class="alert alert-error" style="display: block">${message}</div>
但是Gregg是对的,你应该从不修改没有redirect
的客户数据。
如果这样做,用户可能会刷新(或返回)相同的URL,并意外再次尝试相同的操作。你应该在hitt5的答案中真的喜欢。
答案 3 :(得分:0)
// backend code example
def save () {
if(params.name) {
.
.
object.save();
flash.message = "Saved successfully"
}
else {
flash.message = "Saved fail"
}
// HTML example
<g:if test="${flash.message}">
<div class="update_message" role="status">${flash.message}</div>
</g:if>