В первой части, посвященной dGrowl сообщениям, рассмотрели как подключать и вызвать dGrowl-уведомления из клиентского скрипта. Сегодня рассмотрим, как это сделать со стороны сервера, например из Java-кода.
Техническая подоснова поста взята отсюда.
Для того, чтобы добиться желаемого нужно:
1. Нам нужно передать некоторый JavaScript код для его выполнения в клиент (браузер) для его последующего выполнения в рамках этой страницы, например, по завершению ее частичного обновления. Для этого в классе UIViewRootEx есть метод postScipt(). Сам класс, если я правильно понимаю (нет - поправьте), представляет собой (описывает) корневой элемент страницы (xPage). Получить объект класса UIViewRootEx можно взяв значение переменной view и приведя его к соотв. типу:
Для генерации скрипта можно использовать, например, вот такой код:
, где JSUtil (com.ibm.xsp.util.JSUtil) позволит добавить строковые значения в скрипт корректным образом - не нужно будет думать о соответствующих кавычках.
В моем код (в предыдущих статьях родился класс MessageBean, отвечающий за отправку и обработку сообщений) это все переросло в следующие Java-методы:
Вызов на странице (уже серверным JavaScript) будет выглядеть как:
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Комментируйте, обсуждайте! #xPages-по-русски
Техническая подоснова поста взята отсюда.
Для того, чтобы добиться желаемого нужно:
1. Нам нужно передать некоторый JavaScript код для его выполнения в клиент (браузер) для его последующего выполнения в рамках этой страницы, например, по завершению ее частичного обновления. Для этого в классе UIViewRootEx есть метод postScipt(). Сам класс, если я правильно понимаю (нет - поправьте), представляет собой (описывает) корневой элемент страницы (xPage). Получить объект класса UIViewRootEx можно взяв значение переменной view и приведя его к соотв. типу:
UIViewRootEx2 view = (UIViewRootEx2)ExtLibUtil.resolveVariable(FacesContext.getCurrentInstance(),
"view"
);
2. Сгенерировать сам скрипт для отправки в клиент. Тут единственный момент - правильная генерация кода со всеми кавычками и пр.Для генерации скрипта можно использовать, например, вот такой код:
StringBuilder result = new StringBuilder(); result.append("dg.addNotification("); if (! StringUtil.IsEmpty(detail)) JSUtil.addString(result, detail); result.append(",{'channel':"); JSUtil.addString(result, messageType.getDGrowlChannel()); if (! StringUtil.IsEmpty(summary)) { result.append(", 'title':"); JSUtil.addString(result, summary); } if (duration.intValue() == 0) result.append(", 'sticky':true"); else result.append(", 'duration':" + duration); result.append("});");
, где JSUtil (com.ibm.xsp.util.JSUtil) позволит добавить строковые значения в скрипт корректным образом - не нужно будет думать о соответствующих кавычках.
В моем код (в предыдущих статьях родился класс MessageBean, отвечающий за отправку и обработку сообщений) это все переросло в следующие Java-методы:
/** * * @param messageType * @param summary * @param duration if == 0 then - isSticky */ public static void popupMessage(final Message.MessageType messageType, final String summary, final String detail, final Number duration) { StringBuilder result = new StringBuilder(); result.append("dg.addNotification("); if (! StringUtil.IsEmpty(detail)) JSUtil.addString(result, detail); result.append(",{'channel':"); JSUtil.addString(result, messageType.getDGrowlChannel()); if (! StringUtil.IsEmpty(summary)) { result.append(", 'title':"); JSUtil.addString(result, summary); } if (duration.intValue() == 0) result.append(", 'sticky':true"); else result.append(", 'duration':" + duration); result.append("});"); getViewRoot().postScript(result.toString()); } public static UIViewRootEx2 getViewRoot() { return (UIViewRootEx2)ExtLibUtil.resolveVariable(FacesContext.getCurrentInstance(), "view"); }
Вызов на странице (уже серверным JavaScript) будет выглядеть как:
MessageBean.popupMessage(Message.MessageType, String TITLE, String TEXT, Number DURATION);Пример вызова и использования как всегда можно посмотреть в Demo-приложении.
Если вам понравился пост, жмите +1, делитесь в соц. сетях и форумах! Комментируйте, обсуждайте! #xPages-по-русски
Комментарии
Отправить комментарий