Действие кнопки пропуска PreRenderView после возврата браузера

У меня есть страница результатов поиска с кнопкой "Показать больше результатов". Базовый компонент имеет сессионную область, и мы используем preRenderView для выполнения метода поиска в базовом компоненте:

<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 или есть другой способ добиться того, что я пытаюсь сделать?

Спасибо за помощь!

1 ответ

Решение

Поскольку я не получил ответа, я нашел решение этой проблемы.

Я позаботился о том, чтобы не вызывать ajax-вызовы метода слушателя (принося некоторые жертвы), и использовал ответ BalusC в этой теме.

С помощью:

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

в методе слушателя решается эта проблема.

Другие вопросы по тегам