Создание FacesMessage в методе действия вне механизма преобразования / проверки JSF?

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

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

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

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

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

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

Спасибо!

1 ответ

Решение

Ты можешь использовать 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 ID клиента.

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

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

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

<h:form id="formid">
    <h:inputText id="inputid" />
    <h:message for="inputid" />
Другие вопросы по тегам