grails - 显示flash消息

sar*_*ara 9 grails

我是Grails的新手,我有一个问题对大多数人来说应该很容易.

我有一个显示object列表的页面.我想,如果有一个显示的消息DataIntegrityViolationobject被删除.我在做的是:

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
    }
}
Run Code Online (Sandbox Code Playgroud)

这是应该显示flash消息的位置:

  <g:if test="${flash.message}">
  <div class="alert alert-error" style="display: block">${flash.message}</div>
Run Code Online (Sandbox Code Playgroud)

对不起 - 我知道这是一个愚蠢的问题,但我真的找不到解决方案.

hit*_*ty5 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)
Run Code Online (Sandbox Code Playgroud)

然后,您可以检查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>
Run Code Online (Sandbox Code Playgroud)

  • 除非您通过 Ajax 提交请求,否则您无法在不重新加载浏览器(服务器重定向/转发)的情况下修改客户端数据。 (2认同)

Asi*_*sif 5

// 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>
Run Code Online (Sandbox Code Playgroud)

  • 改进您的注释的建议:在此代码的关键部分是什么,它的作用以及为什么最好用这种方式添加一些文字。 (2认同)