欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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();
		}
		
	}
相关标签: liferay