我的控制器中有这个grails函数:
def remediationSearch() {
def resultList
if (params.rerender) {
println "<><><> remediationsearch called with rerender."
resultList = recordSearchService.individualSearch(session.oldIndRemedParams)
}
else {
params.selectedBatch = selectedBatch
session.oldIndRemedParams = params
resultList = recordSearchService.individualSearch(params)
println "<><><> remediationsearch called fresh."
}
render(template: 'indivSearchResults', model: [resultList: resultList, resultCount: resultList?.size()])
println "<><><> remediationsearch done at " + new Date()
}
当我调用这个与它无关的方法(在同一个控制器中)时,它似乎被调用了:
def chooseupload = {
println "<><><> Begin choose/upload at: " + System.nanoTime()
if (session.user == null) {
render(contentType: 'text/json') {
[success: true, url: createLink(controller: 'customer', action: 'logout')]
}
}
else {
selectedBatch = null
def batchList = (Batch.findAllWhere(userId: session.user.id.toLong(), [sort: "lastUpdate", order: "desc"]))
render(template: 'chooseupload', model: [batchList: batchList, batchCount: batchList.size()])
}
println "<><><> End choose/upload at: " + System.nanoTime()
}
第二个方法完成执行,然后由于我不理解的原因调用了第一个方法。它(第一个函数)是由某个浏览器机制调用的吗?因为它在会话中存储内容而被调用?如果有任何正确的指示,我将不胜感激。我通过调用"chooseupload"方法打印了这个:
<><><> Begin choose/upload at: 446158993759810
<><><> End choose/upload at: 446159022252873
<><><> Begin remediationSearch at: 446159080286132
<><><> Rerender call to entityRemediationSearch.
<><><> End remediationSearch at: 446159135646835
因此,发生的情况是chooseupload
函数的模板渲染,但它立即被remediationSearch()
函数渲染的模板渲染。这是一个令人不快的结果,导致我对整件事进行了调查。
不确定这作为评论或回答是否更有意义,但我没有发表评论所需的50个声誉,所以这里是一个答案:-)
我注意到,在你的文本输出中,你有一行:
<><><> Rerender call to entityRemediationSearch.
但您提供的代码中没有包含这一点。是否可能您使用的IDE没有正确清除类文件的旧版本?chooseupload()
是否在某个时间点调用了remediationSearch()
?如果是这样的话,那么在运行grails clean
之后,尝试从命令行运行它似乎会很好。