Действие кнопки пропуска PreRenderView после возврата браузера
У меня есть страница результатов поиска с кнопкой "Показать больше результатов". Базовый компонент имеет сессионную область, и мы используем preRenderView для выполнения метода поиска в базовом компоненте:
<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 в методе слушателя (как описано здесь), и это решает проблему, но для меня это невозможно, поскольку существуют запросы ajax, которые должны выполнять метод слушателя (изменение критериев поиска).
Что-то я не понимаю в preRenderView или есть другой способ добиться того, что я пытаюсь сделать?
Спасибо за помощь!
1 ответ
Поскольку я не получил ответа, я нашел решение этой проблемы.
Я позаботился о том, чтобы не вызывать ajax-вызовы метода слушателя (принося некоторые жертвы), и использовал ответ BalusC в этой теме.
С помощью:
if (FacesContext.getCurrentInstance().getPartialViewContext().isAjaxRequest()) {
return; // Skip ajax requests.
}
в методе слушателя решается эта проблема.