Обмен данными с портлетами с использованием liferay и icefaces - PullRequest
0 голосов
/ 09 января 2010

Я использую liferay 1.8.2 и liferay 5.2. У меня много портлетов в разных военных файлах, и я попробовал примеры в документах liferay о том, как безуспешно обмениваться данными между различными портлетами в нескольких войнах.

  1. При совместном использовании sesssion я не смог получить данные из первого портлета во второй портлет, даже если они находились в области приложения сессии портлета.
  2. Когда я использую четный механизм, я получаю ошибку, когда использую <portlet:defineObjects /> and <portlet:actionURL /> теги

Причина: javax.faces.FacesException: Не удалось выполнить жизненный цикл JSP.
на com.icesoft.faces.webapp.parser.Parser.parse (Parser.java:181)
на com.icesoft.faces.application.D2DViewHandler.renderResponse (D2DViewHandler.java:439)
... еще 189 Вызывается: javax.servlet.jsp.JspException: java.lang.reflect.InvocationTargetException
at com.liferay.taglib.portlet.ActionURLTag.doEndTag (ActionURLTag.java:212)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:246)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.executeJspLifecycle (Parser.java:229)
на com.icesoft.faces.webapp.parser.Parser.parse (Parser.java:162)
... еще 190
Вызывается: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke (Method.java:597)
at com.liferay.portal.kernel.util.MethodInvoker.invoke (MethodInvoker.java:180)
на com.liferay.portal.kernel.util.MethodInvoker.invoke (MethodInvoker.java:49)
at com.liferay.taglib.portlet.ActionURLTag.doTag (ActionURLTag.java:179)
в com.liferay.taglib.portlet.ActionURLTag.doEndTag (ActionURLTag.java:200) ... еще 199
Вызывается: javax.servlet.jsp.JspException: java.lang.UnsupportedOperationException
at com.liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag (ActionURLTagUtil.java:174)
... еще 207
Вызвано: java.lang.UnsupportedOperationException
на com.icesoft.faces.webapp.parser.StubHttpServletRequest.getAttribute (StubHttpServletRequest.java:116)
на com.liferay.portal.servlet.taglib.portlet.TagUtil.getPortletName (TagUtil.java:100)
at com.liferay.portal.servlet.taglib.portlet.ActionURLTagUtil.doEndTag (ActionURLTagUtil.java:68)

Может кто-нибудь предложить с подробным объяснением и примером кода, как я могу достичь IPC между портлетами, расположенными в разных WAR

1 Ответ

1 голос
/ 11 января 2010

Межпортлетная коммуникация (IPC) невозможна в разных WAR с использованием IceFaces 1.8.x.

Это будет возможно, когда выйдет IceFaces 2.0, Альфа уже доступна.

Тем не менее, можно сделать что-то вроде IPC, используя IceFaces 1.8.x. Глава «Расширенные темы» Руководства по разработчикам Icefaces охватывает эту тему:

Использование Ajax Push позволяет портлетам обновляться на основе серверной части события, которые меняют состояние Текущий вид. Это может быть мощным функция, которая также может быть использована для сделать форму интерплета связь (IPC) в определенных конфигурации.

IPC упоминается только в портлете. 1.0 спецификация (JSR 168), но формально определена в портлете 2.0 спецификация (JSR 286).

Он спроектирован как событие / слушатель модель. Тем не менее, можно использовать механизм ICEfaces Ajax Push для обновить портлеты на основе изменений в базовая модель. Способ сделать это в настоящее время с ICEfaces является:

  • Развертывание портлетов, которые должны взаимодействовать в одном архиве (.war файл).
  • Использование bean-объектов в области приложения для управления общим состоянием между
    портлетов.
  • Используйте функцию ICEfaces Ajax Push для запуска обновлений клиента
    когда общее состояние изменяется.
  • Пример того, как это сделать, приведен в примере чата ICEfaces. портлет.
...