2012-01-12 24 views
1

這是問題:我有一個remoteForm,它本身工作正常。我調試了控制器,並且每個命令都運行完畢。但是,如果發生異常並且我設置了flash.error消息。該消息將僅在手動按F5(刷新)後顯示。我不明白爲什麼AJAX調用可以工作,但閃光消息是空的。Grails:如果您使用ajax,爲什麼只刷新刷新消息?

我有一個遠程表單(index.gsp中):

 ... 
     <g:formRemote name="remoteForm" 
         url="[ controller: 'document', 
         action: 'search']" 
         onLoading="showSpinner();" 
         update="searchBlock" 
         action="${createLink(controller: 'document', action:'search')}" 
         > 

     <div class='info_message'> 
      ${flash.message} 
     </div> 
     <div id="searchBlock">will be exchanged</div> 
     ...... 

控制器:

...... 
     } catch (Exception e){ 
      log.error(e) 
      flash.error = e.getMessage() 
      flash.message="HINTTEST" 
      render (template:'searchNoResult') 
      return 
     } 
    ..... 

模板(_searchNoResult的)具有以下內容:

<span>Sorry, your search yielded no result.</span> 

    <g:if test='${flash.error}'> 
     <div class='error_message'> 
      Error: ${flash.error} 
     </div> 
    </g:if> 
    <g:if test='${flash.messages}'> 
     <div class='info_message'> 
      Hint: ${flash.message} 
     </div> 
    </g:if> 

文檔說明:Flash範圍在當前請求和通話之後存在。如果我使用正常表單並提交所有工作,但我想使用ajax和呈現模板,所以我不必經常重複代碼。

編輯1 首先渲染index.gsp。 remoteForm使用包含flash.messages的模板更改seachBlock div。他們沒有填充。

Grails版本1.3.7目前無法升級。

編輯2 異常e,不是異常,這是我原來拋出的異常。該消息爲空,導致消息爲空......

+0

這是一個錯字嗎?你的控制器正在填充「flash.message」,但你的模板的測試是針對「flash.messages」 – 2012-01-12 20:28:52

回答

5

從代碼中可以看出,當ajax請求返回響應時,沒有任何內容用消息更新info_message div。 formRemote只更新searchBlock元素。 如果頁面不刷新,則無法呈現flash.message。