jsf - перехватить, когда пользователь покидает страницу - PullRequest
1 голос
/ 08 июля 2010

У меня есть следующие 3 простые страницы в приложении JSF.

index.html
start.html
confirmSuccess.thml

start.html - это простая форма с надписью «GO!» Кнопка и HTML-ссылка обратно на index.html. Когда пользователь нажимает GO! это пинки транзакции в компоненте поддержки. Если это не удается, я хочу, чтобы форма start.html снова отображалась, но с ошибкой, объясняющей ошибку. Итак, у меня установлен флажок ошибки в моем компоненте поддержки, и отображение ошибок управляется с помощью атрибута rendered = "".

Простой, верно?

Итак, как мне обработать случай, когда пользователь затем щелкает ссылку html на index.html, а из index.html щелкает ссылку обратно на start.html или просто щелкает обратно. То есть, как очистить перехватить, что пользователь покинул стартовую страницу, и очистить флаг ошибки, чтобы я знал во второй раз, что мне не нужно отображать ошибку.

Возможно ли это без углубления в суть управления жизненным циклом JSF?

Примечание Перечисленные 3 страницы являются грубым упрощением моего веб-приложения, на самом деле, есть несколько страниц, на которые пользователь может перейти с start.html, поэтому я не хочу иметь решение, в котором я необходимо отследить страницу, на которую кто-то пришел, чтобы очистить флаги для запуска.

1 Ответ

1 голос
/ 08 июля 2010

Звучит так, как будто вы передаете данные области запроса в bean-объекте сессии. Сделайте bean-компонент, содержащий данные области запроса request scoped, и дайте указание браузеру не кэшировать динамические страницы, чтобы он был вынужден повторно запрашивать страницу с веб-сервера, а не с история.

Тем не менее, я бы предпочел использовать комбинацию FacesContext#addMessage() и <h:messages/> для отображения ошибок. Вы можете использовать clientId из null для обозначения глобального сообщения. Они, в свою очередь, уже основаны на запросах, так что вам не нужно хлопотать с флагом , чтобы отобразить / отменить отображение ошибки.

1019 * Е.Г. *

public void submit() {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Error!"));
}

с

<h:messages globalOnly="true" />
...