3

我有一个带有“显示更多结果”按钮的搜索结果页面。支持 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. 问题->未调用 onClickShowMoreResults() 函数,而是调用了 searchSolutions() 侦听器方法(这种情况间歇性发生,大多数情况下该函数被正确调用,一旦我遇到问题,一切都很好,我可以重现它每次都使用步骤 2 到 4,而无需开始新的搜索)。

我尝试在侦听器方法中跳过 ajax 请求(如此所述),它解决了问题,但这对我来说是不可能的,因为有需要执行侦听器方法的 ajax 请求(更改搜索条件)。

关于 preRenderView 有什么我不明白的地方,还是有另一种方法可以实现我想要做的事情?

谢谢您的帮助!

4

1 回答 1

0

由于我没有得到答案,因此我找到了解决此问题的方法。

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

使用 :

if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) { 
       return; // Skip ajax requests.
}

在 listener 方法中解决了这个问题。

于 2013-09-04T16:52:37.587 回答