Создание FacesMessage в методе действия вне механизма преобразования / проверки JSF? - PullRequest
5 голосов
/ 16 ноября 2010

В настоящее время я изучаю jsf 2.0 из основной книги jsf 2.0 + glassfish + cdi.

Я хотел бы задать вопрос об обработке проверок, которые не определены на страницах jsf или управляемых / именованных bean-компонентах.с bean-validation-framework.У меня в голове есть эти уровни:

  • 1) ui tier / jsf pages
  • 1.5) JSF управляемые / именованные бины (я использую 1.5, потому что я думаю, что он все еще тесно связан суровень jsf, как и базовые компоненты)
  • 2) уровень бизнес-логики (который очищен от jsf-материалов / импортов, выполняющих только чисто бизнес-логику)
  • 3) уровень постоянства

Я представляю, что уровень 1.5 (bean-компонент jsf) инициализирует и вызывает уровень 2 (объекты бизнес-логики), предоставляя аргументы при вызове бизнес-методов, выбирая результат, заполняя результат в свойствах bean-компонента jsf, чтобы пользовательский интерфейс мог правильно отображаться.

Что удивительно, так это тот факт, что уровень 2 (объекты бизнес-логики) может выполнять проверку предоставленных аргументов или проверку данных и т. Д. И может генерировать исключения или объекты ошибок.

Я думаю, что смогу обработать исключения и получить объекты ошибок на уровне 1.5 (управляемые bean-компоненты jsf), но как мне отобразить ошибку на отображаемых страницах??Кажется, я не могу найти его в книге, которую я читаю, но я надеюсь, что есть способ создать глобальное сообщение об ошибке и каким-то образом внедрить его куда-нибудь, чтобы он отображался тегом?

Спасибо!

1 Ответ

26 голосов
/ 16 ноября 2010

Вы можете использовать FacesContext#addMessage(), чтобы программно добавить FacesMessage в контекст.

FacesContext facesContext = FacesContext.getCurrentInstance();
FacesMessage facesMessage = new FacesMessage("This is a message");
facesContext.addMessage(null, facesMessage);

Когда вы устанавливаете аргумент идентификатора клиента с помощью null, оно станет глобальным сообщением.Вы можете отображать и фильтровать их, используя <h:messages />

<h:messages globalOnly="true" />

. globalOnly="true" будет отображать только сообщения с null идентификатором клиента.

Однако вы также можете указать конкретный идентификатор клиента.

facesContext.addMessage("formid:inputid", facesMessage);

Этот будет в конечном итоге в

<h:form id="formid">
    <h:inputText id="inputid" />
    <h:message for="inputid" />
...