`
sunlujing
  • 浏览: 178123 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

liferay ipc porltet间通信DEMO

阅读更多
portlet2.0 的通信特性
    JSR268中定义了portlet之间的通信协议
     基本的原理就是事件监听机制,portlet A 触发事件。portlet B对时间进行监听并作出反应。传递的数据放在 事件的 payload 里面。并且事件通信的两个portlet可以不再同一个page,需要修改portlet.event.distribution=layout。 具体参见liferay in action 里 ipc 那一章。

     下面展示通过liferay in action 的一个例子。
      pitchPortlet view.jsp 上有一个 按钮。通过该按钮 该portlet发送一个事件。
      catcherPorlet 写好时间监听函数。

step 1. 创建 pitchPortlet.(使用liferay官方下载的eclipse,已经集成好liferay)
     
a. 修改portlet.xml
          <event-definition>
    <qname xmlns:x="http://liferay.com/events">x:ipc.pitch</qname>
     <value-type>java.lang.String</value-type>
        </event-definition>
         声明 portlet 事件。
b. 定义事件发生者(在pitchPortlet 的xml定义)
           <supported-publishing-event>
             <qname xmlns:x="http://liferay.com/events">x:ipc.pitch</qname>
        </supported-publishing-event>
c. 定义事件处理者 (在 catchPortlet 的xml定义)

           <supported-processing-event>
            <qname xmlns:x="http://liferay.com/events">x:ipc.pitch</qname>
        </supported-processing-event>

d.完整的xml定义:见附件

   e.完成 PitcherPortlet

           @ProcessAction(name="pitchBall")
public void pitchBall(ActionRequest actionRequest, ActionResponse actionResponse)throws IOException, PortletException {
                  //其他逻辑

                    //qname 与事件定义时一直
QName qName = new QName  ("http://liferay.com/events", "ipc.pitch");
actionResponse.setEvent(qName, pitchType);

   
}

   f.完成catchPortlet

         @ProcessEvent(qname="{http://liferay.com/events}ipc.pitch")
public void catchBall(EventRequest request, EventResponse response) {
   Event event = request.getEvent();
   String pitch = (String)event.getValue();
   response.setRenderParameter("pitch", pitch);
}

    g. pitchPortlet /view.jsp

          <%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<p>Click the link below to pitch the ball. </p>
<portlet:actionURL var="pitch" name="pitchBall"></portlet:actionURL>
<a href="<%=pitch%>">Pitch!</a>

h. catchPortlet  /view.jsp

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<%
String pitch = (String)renderRequest.getParameter("pitch");
%>
<p>And the pitch is....</p>

<p>
<% if (pitch!=null) { %>
<%=pitch %>!
<% } else { %>
... waiting for pitch.
<% } %>  
      

I :部署运行 点击pitch 就可以看到 catchPortlet 的反应
分享到:
评论
2 楼 lyh20081984 2012-06-25  
我也想要源码,照着你上面的教程会报错,new Qname那里就不一样了,而且不是完整的,没理清头绪,给我一份吧,感谢!lyh20081984@126.com
1 楼 lijiayao10 2012-05-03  
把例子源码发给我,谢谢啦
a304101279@163.com

相关推荐

Global site tag (gtag.js) - Google Analytics