您的位置:首页 > 其它

Portlet 通信(四) 利用事件传递参数

2017-10-08 16:47 453 查看
利用事件传递参数可以是对象也可以是基本类型

四个步骤:

1):在portlet.xml中定义事件(qname或者name都可以)

<!-- 使用事件传递参数 qname-->
<event-definition>
<qname xmlns:x="http://www.wq.com">x:event</qname>
<!-- 数据类型 -->
<value-type>entity.Emp</value-type>
</event-definition>
2):在portlet.xml中发布事件和接收事件

<!-- 发布事件 -->
<supported-publishing-event>
<qname xmlns:x="http://www.wq.com">x:event</qname>
</supported-publishing-event>
<!-- 接收事件 -->
<supported-processing-event>
<qname xmlns:x="http://www.wq.com">x:event</qname>
</supported-processing-event>

3):在一个portlet中接收事件,在另一个portlet中接收事件

案例:G向H利用事件传递参数  分别使用qname和name

====================================================================

portletG

package com.test;

import java.io.IOException;
import java.util.Date;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.ProcessAction;
import javax.xml.namespace.QName;
import com.liferay.util.bridges.mvc.MVCPortlet;
import entity.Emp;

/**
* 通过事件传递参数
*/
public class TranG extends MVCPortlet {

@ProcessAction(name="send4")
public void ww(ActionRequest request,
ActionResponse response) throws IOException, PortletException {

Emp emp = new Emp();
emp.setName("丹丹");
emp.setAge(10);
emp.setTime(new Date());
//发布事件qname
QName qname = new QName("http://www.wq.com", "event");
response.setEvent(qname, emp);
//发布事件name--传递字符串
response.setEvent("event2", "Hello World");
}
}


JSP
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<portlet:actionURL var="from" name="send4"></portlet:actionURL>

<html>
<body>
<form action="<%=from%>" method="post">
<input type="submit" value="提交"/>
</form>
</body>
</html>

PortletH
package com.test;

import javax.portlet.Event;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import javax.portlet.ProcessEvent;
import com.liferay.util.bridges.mvc.MVCPortlet;
import entity.Emp;

/**
* Portlet implementation class TranH
*/
public class TranH extends MVCPortlet {

@ProcessEvent(qname="{http://www.wq.com}event")
public void testEvent(EventRequest request,EventResponse response){
//接收事件
Event e = request.getEvent();
Emp emp = (Emp) e.getValue();
System.out.println(emp.getName()+":"+emp.getAge()+":"+emp.getTime());
}

@ProcessEvent(name="event2")
public void testEvent2(EventRequest request,EventResponse response){
//接收事件
Event e = request.getEvent();
String str = (String) e.getValue();
System.out.println(str);
}

}


JSP
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />
---------------------------------------------------------------------------------------------------------------------

点击提交按钮后,传递到指定Portlet(带有事件定义的qname和name方法中)

案例中,PortletH的两个方法中获取到了两次事件传递过来的参数,互不影响

输出结果如下:

丹丹:10:Sun Oct 08 16:46:01 GMT+08:00 2017

Hello World
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: