Как работать с сообщениями JSF между навигациями по страницам (после перенаправления-GET)

Я разрабатываю JSF 2 веб-приложение и использование неявной навигации со страницы на страницу с указанием значений результатов и изменением значений url. У меня также есть некоторые запросы Ajax, чтобы иметь возможность вносить изменения на некоторых страницах без необходимости отправлять все.

моя проблема возникает, когда, например, я редактирую данные пользователя и сохраняю изменения. Управляемый компонент сохраняет данные пользователя и возвращает строку для перехода к списку пользователей. Когда пользователь правильно сохранен, это до завершения метода действия.

<p:commandButton value="#{msg.UPDATE}" action="#{manager.actionSave}"
            ajax="false" />

код в метод

FacesContext.getCurrentInstance().addMessage(clientId, 
    new FacesMessage(FacesMessage.SEVERITY_INFO, msg, msg));
и даже у меня есть <h:messages /> тег на моей главной странице, там ничего не отображается.

1 ответов


симптомы проблемы предполагают, что вы переходите по перенаправлению вместо (по умолчанию) вперед либо в результате, или <redirect/> запись в навигационном случае, если вы все еще используете устаревшие правила навигации в faces-config.xml.

лица сообщения запрос ограничено и доступны только в ресурсе обслуживается текущего запроса. При навигации по перенаправлению вы в основном инструктируете webbrowser создать новый запрос на заданный URL. Сообщения faces в этом запросе вообще недоступны.

если перенаправление действительно является обязательным, например, для выполнения после перенаправления-GET pattern-что хорошо -, тогда вам нужно сохранить сообщение во флэш-области. Вы можете сделать это, позвонив Flash#setKeepMessages(), передает true.

context.addMessage(clientId, message);
context.getExternalContext().getFlash().setKeepMessages(true);

обратите внимание, что это не удастся, если вы используете версию Mojarra старше 2.1.14 и перенаправление на ресурс в другая базовая папка. См. также вопрос 2136.