12

私は 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
    }
}

フラッシュメッセージが表示される場所は次のとおりです。

  <g:if test="${flash.message}">
  <div class="alert alert-error" style="display: block">${flash.message}</div>

申し訳ありませんが、ばかげた質問であることはわかっていますが、解決策が見つかりません。

4

4 に答える 4

22

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>
于 2013-01-11T12:27:58.043 に答える
6
// 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>
于 2019-07-24T10:24:49.013 に答える
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>
于 2014-12-10T22:33:42.513 に答える
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の答えのようにするべきです。

于 2013-01-13T00:30:29.153 に答える