Для улучшения восприятия пользователем приложения, с которым он общается было бы не плохо взаимодействовать с ним через отправку ему уведомлений (например, "Документ успешно сохранен". В цикле XPages. Диалог с пользователем буду рассматривать различные варианты отправки и отображения сообщений/уведомлений пользователю, двигаясь последовательно от простейших и не самых симпатичных до вполне радующих глаз.
В определенный момент планирую перейти от OneUI темы (как в скриншотах, так и в демо-приложении) к Bootstrap, вероятно, описав нюансы подключения и перехода отдельным постом.
В конце будет получен Java-класс (Bean), отвечающий за отправку сообщений и 1-2 Custom Control для их корректных отображений.
Сегодня рассмотрим простейший вариант отправки сообщений пользователю для взаимодействия с ним.
Теоретическая часть
JSF поддерживает отправку/отображение сообщений (об ошибках или других действиях). Сообщение представляет собой класс FacesMessage (javax.faces.application.FacesMessage)
Вы можете наблюдать эту картину, если используете компонент из стандартной палитры xp:messages или xp:message для отображения ошибок при проверки введенных данных.
Отправка сообщения осуществляется через метод addMessage класса FacesContext (javax.faces.context.FacesContext). Получить экземпляр FacesContext можно через его статический метод FacesContext.getCurrentInstance().
Метод имеет следующую сигнатуру:
addMessage(String clientId, FacesMessage message), где
clientId - идентификатор компонента, с которым связано сообщение, если его не задать - глобальное сообщение.
message - собственно сам объект сообщения.
addMessage(String clientId, FacesMessage message), где
clientId - идентификатор компонента, с которым связано сообщение, если его не задать - глобальное сообщение.
message - собственно сам объект сообщения.
Практическое применение
Шаг 1. Java Bean
Положим начало Java-классу. В нем пока будет только 1 метод - postMessage, принимающий в качестве параметра тип сообщения (FacesMessage.Severity), заголовок и текст сообщения.
Примечания:
1. Класс не будет статическим, т.к. планируется к использованию именно, как Java Bean (т.е. предполагает наличие public конструктора без параметров
2. А вот сам метод для его удобства использования в коде будет статическим
package livescripts.util; import java.io.Serializable; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; public class MessageBean implements Serializable { private static final long serialVersionUID = 1L; public static void postMessage(final FacesMessage.Severity severity, final String summary, final String detail) { FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(severity, summary, detail)); }
}
Шаг 2. Подключение Java Bean
В Faces-config.xml (найти его можно, например, в Package Explorer, папка WEB-INF) прописываем загрузку нашего класса. Он нам будет нужен на протяжении всей работы, а значит его область - session
<managed-bean-name>MessageBean</managed-bean-name> <managed-bean-class>livescripts.util.MessageBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope>
Шаг 3. Отображение
Тут пока все совсем просто: кидаем на xPage компонент xp:messages...и все, дальше все будет сделано за нас.
Какие нюансы:
1. Независимо от типа сообщения мы всегда будем видеть однотипное отображение
2. Каждая отправка сообщения будет затирать предыдущее (как при Full, так и при Partial Update)
3. Если отправить в одном действии несколько сообщений - они все успешно отобразятся.
Шаг 4. Вызов
Пример для типа FacesMessage.SEVERITY_INFO:
- из Java:
MessageBean.postMessage(FacesMessage.SEVERITY_INFO, "Информация!", "Текст сообщения");
- из JavaScript:
MessageBean.postMessage(javax.faces.application.FacesMessage.SEVERITY_INFO, "Информация!", "Текст сообщения");
Посмотреть пример можно в Demo-приложении.
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Буду признателен! :)
p.s. Ввел новый тег xPages-по-русски!
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Буду признателен! :)
p.s. Ввел новый тег xPages-по-русски!
Комментарии
Отправить комментарий