9.5.6 portlet 之间的通信方式-Portlet events

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();
		}
		
	}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值