Создание 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" />