浏览器返回后,PreRenderView跳过按钮操作

时间:2013-09-03 15:15:56

标签: jquery ajax jsf back-button prerenderview

我的搜索结果页面上显示“显示更多结果”按钮。支持bean是会话范围的,我们使用preRenderView在支持bean中执行搜索方法:

<f:event type="preRenderView" listener="#{SearchBean.searchSolutions}" />

“显示更多结果”按钮的定义如下:

<h:commandButton action="#{SearchBean.onClickShowMoreResults()}">
    <f:ajax disabled="false" render=":searchResultsForm"/>
</h:commandButton>

以下是我遇到的问题以及重现的步骤:

  1. 执行搜索。
  2. 点击指向结果页面的搜索结果。
  3. 使用浏览器后退按钮。
  4. 点击“显示更多结果”按钮。
  5. 问题 - &gt;调用onClickShowMoreResults()函数并调用searchSolutions()侦听器方法(这种情况间歇性地发生,大部分时间函数被正确调用,一旦我遇到问题,一切都好了,我可以每次使用步骤重现它2到4而没有开始新的搜索)。
  6. 我尝试在侦听器方法中跳过ajax请求(如here所述)并且它解决了问题,但这对我来说是不可能的,因为有需要执行侦听器方法的ajax请求(更改搜索) criteras)。

    是否有一些我对preRenderView不了解的东西,还是有另一种方法来实现我想要做的事情?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

由于我没有回答,我找到了解决这个问题的方法。

我确保没有对侦听器方法进行ajax调用(做出一些牺牲)并在this线程中使用了BalusC的答案。

使用:

if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { 
       return; // Skip ajax requests.
}
侦听器方法中的

解决了这个问题。