问题是:我有一个remoteForm,它本身运行良好。我调试了控制器,每个命令都能运行。但是,如果发生异常,并且我设置了flash.error消息。只有在我手动按下F5(刷新)后,才会显示该消息。我不明白为什么AJAX调用有效,但是flash消息是空的。
我有一个远程表单(在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的模板更改seachBlockdiv。它们没有填充。
Grails 1.3.7版目前还不可能进行升级。
编辑2异常e不是我最初抛出的exception。消息为null,导致消息为null。。。。
从您显示的代码中,当ajax请求返回响应时,没有任何内容用消息更新info_messagediv。formRemote只更新searchBlock元素如果页面不刷新flash,则无法呈现消息