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>
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
四个步骤:
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
相关文章推荐
- Portlet 通信(五) 通过 URL 传递参数
- 利用闭包实现onclick事件传递参数
- Flex中利用事件机制进行主程序与子窗体间参数传递
- jQuery事件之传递参数
- Knockout 事件传递参数的方法
- 利用XML转换为table实现在SQL参数中传递表结构
- Android深入探究笔记之二 -- 打开一个新的 Activity 并传递参数与如何响应控件的点击事件 .
- Knockout 事件传递参数的方法
- quick 自定义事件,利用这个事件可以传递消息
- Tkinter事件绑定,参数如何传递
- jQuery事件之传递参数
- 转载如何实现portlet之间的传递参数
- VC++的SendMessage函数如何利用wParam lParam传递参数
- Fragment的通信问题, 新建Fragment为何不要在构造方法中传递参数
- react.js 点击事件传递参数的方法
- 利用uboot传递参数进行内核的不同配置
- Android学习札记14:利用Parcelable在Activity间传递复杂的嵌套ArrayList对象参数
- js 利用闭包循环给li绑定参数不同的点击事件
- jsp利用URI 传递中文 参数
- 利用javascript接收参数传递