В первой части, посвященной 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-по-русски
Комментарии
Отправить комментарий