Сохранение сообщений JSF после перенаправления - PullRequest
6 голосов
/ 21 сентября 2011

У меня есть страница JSF (использующая MyFaces 2.0), которая выполняет небольшой сбор данных при первом отображении.Если он не может найти какую-либо информацию, он должен предоставить сообщение об этом и перенаправить обратно на другую страницу.Я попытался использовать решение, найденное здесь Сохранение FacesMessage после перенаправления для представления черезв JSF (setKeepMessages (true)), но сообщения не отображаются после перенаправления.Единственное отличие, которое я могу выделить, это то, что я не использую правило навигации, я вызываю вызов redirect () для внешнего контекста, потому что это не происходит в обычном действии.

Соответствующий код:

public void redirectToPageWithMessage(String inPage, String message, FacesMessage.Severity severity){
    getFlash().setKeepMessages(true);
    addMessage(message, severity);
    try {
        getFacesContext().getExternalContext().redirect(inPage);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

К сожалению, это не похоже на работу.Перенаправление происходит просто отлично, но тег не отображает сообщение.Есть ли что-то другое в том, как происходит редирект (), который мешает этому работать?

Ответы [ 3 ]

4 голосов
/ 21 сентября 2011

Код, который сохраняет сообщения, выполняется после окончания фазы (см. Flash.doPostPhaseActions (FacesContext)).Таким образом, ожидается, что он не работает, но, возможно, вы можете вызвать Flash.doPostPhaseActions перед перенаправлением.Примечание не является «чистым» решением, но возможно.

0 голосов
/ 28 сентября 2012

У меня была та же проблема, и я решил ее не с помощью ExternalContext.redirect(), а чтобы поиграть с результатами ваших действий.

То есть мое действие, вызванное моими кнопками, возвращает String (результат), который указывает правила навигации для перехода на следующую страницу. С этой системой сообщения сохраняются.

0 голосов
/ 22 сентября 2011

JSFMessages сохраняются только для обработки фактического запроса. Второй запрос делается при использовании перенаправления, поэтому сообщения JSFMessages будут потеряны. EL-Flash - способ обойти это. Этот пример должен работать: http://ocpsoft.com/java/persist-and-pass-facesmessages-over-page-redirects/

...