`
wangyangqq2008
  • 浏览: 34602 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

实现基于事件机制的portlet间通信

 
阅读更多
portlet间通信包括 : 本地portlet与本地portlet通信
                     远程portlet与远程portlet通信
                     本地portlet与远程portlet通信

JSR286规范中定义了本地portlet之间的通信,共享session ,共享资源、事件机制

通过event进行portlet之间通信:

1. 定义publishing event的portlet,定义event-definition ,及supported-publishing-event

<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
	
	<portlet>
		<portlet-name>foodaoportlet</portlet-name>
		<display-name>FooDaoPortlet</display-name>
		<portlet-class>com.liferay.wyy.dao.DAOPortlet</portlet-class>
		<init-param>
			<name>view-template</name>
			<value>/view/view.jsp</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
			<portlet-mode>view</portlet-mode>
		</supports>
		<portlet-info>
			<title>FooDaoPortlet</title>
			<short-title>FooDaoPortlet</short-title>
			<keywords></keywords>
		</portlet-info>
		<security-role-ref>
			<role-name>administrator</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>guest</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>power-user</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>user</role-name>
		</security-role-ref>
		<supported-processing-event>
			<qname xmlns:x="http://wangyy.example.com/food">x:foodItem</qname>
		</supported-processing-event>
		<!-- 定义支持发布的event -->
		<supported-publishing-event>
			<qname xmlns:x="http://wangyy.example.com/food">x:foodItem</qname>
		</supported-publishing-event>
	</portlet>
	
	<!-- 支持event定义 -->
	<event-definition xmlns:x="http://wangyy.example.com/food">
		<qname>x:foodItem</qname>
		<value-type>com.liferay.wyy.dao.model.FoodItem</value-type>
	</event-definition>
</portlet-app>


2.定义处理event的portlet, 定义supported-processing-event 及event-definition

<?xml version="1.0"?>

<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" version="2.0">
	
	<portlet>
		<portlet-name>eventprocessportlet</portlet-name>
		<display-name>EventProcessPortlet</display-name>
		<portlet-class>
			com.liferay.wyy.event.portlet.EventProcessPortlet
		</portlet-class>
		<init-param>
			<name>view-template</name>
			<value>/view/view.jsp</value>
		</init-param>
		<expiration-cache>0</expiration-cache>
		<supports>
			<mime-type>text/html</mime-type>
			<portlet-mode>view</portlet-mode>
		</supports>
		<portlet-info>
			<title>EventProcessPortlet</title>
			<short-title>EventProcessPortlet</short-title>
			<keywords></keywords>
		</portlet-info>
		<security-role-ref>
			<role-name>administrator</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>guest</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>power-user</role-name>
		</security-role-ref>
		<security-role-ref>
			<role-name>user</role-name>
		</security-role-ref>
		<!-- 定义支持处理的event 需要放在publishing-event之前-->
		<supported-processing-event>
			<qname xmlns:x="http://wangyy.example.com/food">x:foodItem</qname>
		</supported-processing-event>
	</portlet>
</portlet-app>


3. 发布event的portlet中处理:
在processAction中添加setEvent代码
//setEvent
                QName qName = new QName("http://wangyy.example.com/food", "foodItem");
                res.setEvent(qName, foodItem);


4.处理event的portlet中代码
/**
     * 处理event事件
     * @param request
     * @param response
     * @throws PortletException
     * @throws IOException
     */
    @ProcessEvent(qname = "{http://wangyy.example.com/food}foodItem")
    public void processFoodItemEvent(EventRequest request, EventResponse response)
    throws PortletException, IOException{
        Event event = request.getEvent();
        FoodItem foodItem = (FoodItem)event.getValue();
        System.out.println("Processing event in EventProcessPortlet id=" + foodItem.getId() + ", name=" + foodItem.getName());
        response.setRenderParameter("foodItemName", foodItem.getName());
    }
分享到:
评论

相关推荐

    jquery portlet

    `jQuery Portlet` 是基于 jQuery UI 框架实现的一种portlet组件,它主要用于构建可自定义布局、具有拖放功能的Web应用程序界面。Portlet是Web应用中的一个模块化组件,常用于企业级门户系统,让用户能够根据个人需求...

    最新最全的Portlet 通信过程详解

    ### 最新最全的Portlet通信过程详解 #### 概念介绍 - **Portal的定义**:Portal是一种基于Web的应用程序,它提供了个性化服务、单点登录能力、内容整合功能,以及作为信息系统的前端界面。它能根据用户的需求提供...

    portlet 开发

    很多portlet实现基于Model-View-Controller(MVC)设计模式,其中模型处理业务逻辑,视图负责渲染,控制器处理用户输入。 13. **portlet与Web服务**: Portlet可以调用Web服务来获取远程数据,或者提供Web服务供...

    liferay ipc porltet间通信DEMO

    本文将深入探讨"Liferay IPC(Inter-Portlet Communication)portlet间通信DEMO",并基于提供的`portlet.xml`文件来解析相关的配置信息。 1. **Liferay IPC简介** Liferay IPC机制使得不同的portlet能够共享数据和...

    Portlet规范之Pluto实现的运用

    JSR286还引入了Portlet事件服务,允许Portlet之间以及Portlet与门户框架之间通过事件机制进行通信。这增强了Portlet应用的交互性和动态性。 #### 15. JSR286新增了共享呈现参数 JSR286规定了共享呈现参数的概念,...

    portlet 2.0 api doc

    8. **portlet间通信(IPC, Inter-portlet Communication)**:JSR286规范引入了portlet间通信机制,如`PortletSession`对象的`setAttribute()`方法,使得portlet能够共享信息。 9. **安全性和权限**:Portlet 2.0 ...

    liferay跨组件间通信实例

    2. **事件机制(Event Mechanism)**:Liferay提供了一种基于发布/订阅模型的事件系统,使得一个组件能够广播事件,其他组件可以监听并响应这些事件。`test-portlet`可以通过发布事件来通知其他组件某些状态的改变,...

    portlet资料

    - 提供的文件“portlet-1_0-pfd-spec.pdf”很可能是一个关于Portlet 1.0规范的文档,该规范定义了portlet开发的标准,包括portlet生命周期、渲染、事件处理、通信等。 - “portlet-1_0-pfd-spec-api.zip”可能包含...

    Portlet 2规范

    该规范在Portlet 1.0的基础上进行了大幅度的改进和完善,不仅增强了Portlet的功能性和互操作性,还引入了重要的特性——Inter-Portlet Communication (IPC),即端口间的通信机制。这对于提高门户应用的灵活性和交互...

    portlet开发指南

    它负责管理Portlet的生命周期、安全性和资源,同时也提供了Portlet之间的通信机制。 **三者关系:** - Portal作为整体的框架,为用户提供一个集中的信息和服务入口。 - Portlet作为具体的功能模块,在Portal中提供...

    portlet源码案例jsr286

    6. **portlet间通信**:通过JSR286,portlet之间可以进行通信,比如通过公共渲染参数(Public Render Parameters)共享数据,或使用Portlet Messaging API进行异步通信。 7. **portlet安全**:portlet开发需要考虑...

    Stringbeans3.5 加载外部portlet应用

    在实际应用中,你可能还会遇到权限管理、portlet通信(如JSR-286的Portlet Inter-portlet Communication,PICC)和portlet缓存等问题。这些问题都需要根据具体需求和portlet的特点来解决。记住,理解并熟练掌握...

    spring-webmvc-portlet.rar

    Portlet框架是为portlet容器(如Liferay、WebSphere Portal)提供的一套标准,它定义了portlet的生命周期、渲染机制以及portlet间通信的规则。portlet是一种独立的、可重用的Web组件,可以嵌入到portlet门户中,提供...

    portlet开发

    此外,portlet之间的通信,如使用portlet间通信(Inter-portlet Communication, IPC)机制,也是重要的一环,这使得portlet可以共享信息和协同工作。 源码分析对于理解portlet的实现至关重要。通过查看和调试提供的...

    JSR 286 Portlet 的新特性,第 3 部分: Portlet 过滤器和 Portlet 窗口

    - **协作和通信**:通过窗口属性和事件,portlet之间可以实现数据交换和协同操作。 通过JSR 286的Portlet过滤器和Portlet窗口,开发者能够构建更加健壮、灵活和用户友好的portlet应用,提升整体门户系统的功能性和...

    Portlet+开发.pdf

    - 提供了事件处理机制,方便 Portlet 之间进行通信。 - 定义了 Portlet 的渲染和动作处理方法。 - 支持国际化和多语言。 #### 五、Portlet 的渲染与交互 - **渲染**:是指将 Portlet 的内容呈现给用户的过程。...

    portlet-1_0-fr-spec.rar_java portal_jetspeed_portal_portlet_门户

    API提供了portlet生命周期管理、渲染、事件处理以及与其他portlet通信的接口和类。 2. **Jetspeed Portal**: Jetspeed是基于Java的开源门户平台,它实现了JSR-168(Portlet API 1.0)和JSR-286(Portlet API 2.0)...

Global site tag (gtag.js) - Google Analytics