Для улучшения восприятия пользователем приложения, с которым он общается было бы не плохо взаимодействовать с ним через отправку ему уведомлений (например, "Документ успешно сохранен". В цикле 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. А вот сам метод для его удобства использования в коде будет статическим
1 2 3 4 5 6 7 8 9 10 11 12 | package livescripts.util; import java.io.Serializable; import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; public class MessageBean implements Serializable { <span class = "Apple-tab-span" style= "white-space: pre;" > </span> private static final long serialVersionUID = 1L; <span class = "Apple-tab-span" style= "white-space: pre;" > </span> <span class = "Apple-tab-span" style= "white-space: pre;" > </span> public static void postMessage( final FacesMessage.Severity severity, final String summary, final String detail) { <span class = "Apple-tab-span" style= "white-space: pre;" > </span>FacesContext.getCurrentInstance().addMessage( null , new FacesMessage(severity, summary, detail)); <span class = "Apple-tab-span" style= "white-space: pre;" > </span>} |
1 | } |
1 |
В Faces-config.xml (найти его можно, например, в Package Explorer, папка WEB-INF) прописываем загрузку нашего класса. Он нам будет нужен на протяжении всей работы, а значит его область - session
1 2 3 | < 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:
1 | MessageBean.postMessage(FacesMessage.SEVERITY_INFO, "Информация!" , "Текст сообщения" ); |
- из JavaScript:
1 | MessageBean.postMessage(javax.faces.application.FacesMessage.SEVERITY_INFO, "Информация!" , "Текст сообщения" ); |
Посмотреть пример можно в Demo-приложении.
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Буду признателен! :)
p.s. Ввел новый тег xPages-по-русски!
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Буду признателен! :)
p.s. Ввел новый тег xPages-по-русски!
Комментарии
Отправить комментарий