【发布时间】:2013-09-06 21:32:16
【问题描述】:
我有一个带有“显示更多结果”按钮的搜索结果页面。支持 bean 是会话范围的,我们使用 preRenderView 来执行支持 bean 中的搜索方法:
<f:event type="preRenderView" listener="#{SearchBean.searchSolutions}" />
“显示更多结果”按钮的定义如下:
<h:commandButton action="#{SearchBean.onClickShowMoreResults()}">
<f:ajax disabled="false" render=":searchResultsForm"/>
</h:commandButton>
这是我遇到的问题和重现的步骤:
- 执行搜索。
- 点击进入结果页面的搜索结果。
- 使用浏览器的后退按钮。
- 点击“显示更多结果”按钮。
- 问题 --> 未调用 onClickShowMoreResults() 函数,而是调用了 searchSolutions() 侦听器方法(这种情况间歇性发生,大多数情况下该函数被正确调用,一旦我遇到问题,一切正常每次都可以通过步骤 2 到 4 重现它,而无需开始新的搜索)。
我尝试在侦听器方法中跳过 ajax 请求(如 here 解释的那样)并解决了问题,但这对我来说是不可能的,因为有需要执行侦听器方法的 ajax 请求(更改搜索条件) .
我对 preRenderView 有什么不明白的地方,还是有其他方法可以实现我想要做的事情?
感谢您的帮助!
【问题讨论】:
-
您是否查看了 ajax 响应正文?你在里面看到
ViewExpiredException了吗? -
@BalusC 我没有在控制台中抛出异常。如何访问 ajax 响应正文?
-
只需查看浏览器内置的 HTTP 流量监控器即可。在 Chrome/Firefox(Firebug)/IE>=9 中按 F12 打开 Web 开发者工具,然后查看“Net”或“Network”选项卡。
-
@BalusC 感谢您的提示,但我认为那里没有例外。此外,我意识到一旦遇到问题,我可以在每次执行步骤 2->4 时重现它,而无需开始新的搜索。
-
也许this可以帮助你
标签: jquery ajax jsf back-button prerenderview