9.5.6 portlet 之间的通信方式-Portlet events
程序员文章站
2022-07-15 13:39:47
...
9.5.6 portlet 之间的通信方式-Portlet events
1 复杂对象
(1) portlet.xml 事件定义,引入位置在<public-render-parameter>
上面
value-type 可以定义一个复杂对象,指向对象所在路径
<event-definition>
<qname xmlns:x="http://www.baidu.com">x:city</qname>
<value-type>com.study.City</value-type>
</event-definition>
(2)建立对象
需要序列化,不然会出错
package com.study;
import java.io.Serializable;
public class City implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8866058865792541064L;
private String id;
private String cityName;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
}
(3)使用:事件发布 portletA
引入位置在 portlet-a 最后, <security-role-ref>
下面,supported-public-render-parameter
上面
此处用 processing 事件也能接收到值,但是都用 publishing 事件接收不到
<supported-publishing-event>
<qname xmlns:x="http://www.baidu.com">x:city</qname>
</supported-publishing-event>
(4)接收事件 portletB
<supported-processing-event>
<qname xmlns:x="http://www.baidu.com">x:city</qname>
</supported-processing-event>
(5)使用事件 portletA.java 中,即发布
QName 是 javax 包中的类
// 公共渲染参数存储对象 begin
City city2 = new City();
city2.setId(id);
city2.setCityName(city);
QName qName = new QName("http://www.baidu.com", "city");
// 如果对象没有序列化,此处会报红
actionResponse.setEvent(qName, city2);
// 公共渲染参数存储对象 end
(6)接收事件
Event 引入的是 portlet 中的
@ProcessEvent(qname="{http://www.baidu.com}city")
public void eventProcess(EventRequest request, EventResponse response) {
try {
Event event = request.getEvent();
City city = (City) event.getValue();
System.out.println("event:" + city.getId() + ":" + city.getCityName());
} catch (Exception e) {
e.printStackTrace();
}
}
2 简单对象
(1)portlet.xml 事件定义
<event-definition>
<name>cityName</name>
<value-type>java.lang.String</value-type>
</event-definition>
(2)portletA中定义发布事件
<supported-publishing-event>
<name>cityName</name>
</supported-publishing-event>
(3)portlet 中定义处理事件
<supported-processing-event>
<name>cityName</name>
</supported-processing-event>
(4)portletA 中发布事件
actionResponse.setEvent("cityName", city);
(5)portletB 中接收事件
@ProcessEvent(name="cityName")
public void cityNameEvent(EventRequest request, EventResponse response) {
try {
Event event = request.getEvent();
String city = (String) event.getValue();
System.out.println("event:" + city);
} catch (Exception e) {
e.printStackTrace();
}
}
上一篇: 【PAT乙级】1056 组合数的和
下一篇: PAT 1048 数字加密