[Liferay]Portlet 之间使用 PortletSession 进行通信

本文介绍了一种在PortletA和PortletB之间传递参数的方法,以改变PortletB的状态。详细步骤包括修改liferay-portlet.xml文件、利用PortletSession进行属性设置与读取。此方法适用于同一web应用的不同war包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Portlet 之间通信有三种方式:

1. PortletSession

2. IPC

3. Cookies


现在有个需要解决的问题,怎么使用 Portlet A 在满足一定条件的情况下,穿参数给 Portlet B,通过该参数改变 Portlet B 的状态。

原本打算使用 IPC, 因为上述三个方法中就属 IPC 概念最通俗易懂操作简单。

但是 IPC 事件的周期首先需要 processAction 再是 processEvent, 在 Resource 状态下貌似是没办法触发 IPC。

于是使用第一种方法,步骤如下

1. liferay-portlet.xml 添加一个属性,注意属性必须按照顺序添加:

<portlet>
	...
	<private-session-attributes>false</private-session-attributes>
	...
</portlet>

2. Portlet A 添加:

PortletSession session = request.getPortletSession();

session.setAttribute("LIFERAY_SHARED_directive", "test" ,PortletSession.APPLICATION_SCOPE);

session.setAttribute 方法第一个参数是对应于 Http Session 的 key,唯一的区别就是定义的 key 必须得有前缀,不然无法在其他 Portlet 中获取。

portal.properties 里的定义:

session.shared.attributes=COMPANY_,LIFERAY_SHARED_,org.apache.struts.action.LOCALE,PORTLET_RENDER_PARAMETERS_,PUBLIC_RENDER_PARAMETERS_POOL_,USER_

3. Portlet B 使用:

PortletSession portletSession = request.getPortletSession();

String directive = (String)portletSession.getAttribute("LIFERAY_SHARED_directive",PortletSession.APPLICATION_SCOPE);

最后需要注意的一点,这个方式适用于同一个 web application 的两个不同 war 包。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值