所以我用谷歌搜索了一整天,得到的答案很少,但他们都失败了。更不用说所有解决方案都超过 3 年了。我正在使用 LR 6.1 CE。将不胜感激简单的工作示例,因为其他答案总是让我获得空值。
3 回答
有 2-3 种方法可以做到这一点,但试试这个。
portletSession
从portletRequest
. _ 使用setAttribute()
具有 3 个参数的方法。第三个参数应该是PortletSession.APPLICATION_SCOPE
.
从 portlet 会话中获取第二个 portlet 的值。使用相同APPLICATION_SCOPE
的来获得它。
编辑:
您还需要将以下标签的值false
设为liferay-portlet.xml
共享参数
<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>
您可以在DTD中阅读有关这些参数的更多信息。
此代码从其他 portlet 调用一个 Action 并发送 2 个参数
您可以使用 :
liferay-portlet:renderURL
liferay-portlet:actionURL
<liferay-portlet:actionURL name="addWallEntry" plid="<%= portletId2 %>" portletName="3_WAR_socialnetworkingportlet" var="shareUrl">
<portlet:param name="redirect" value="<%= viewFolderURL.toString() %>" />
<portlet:param name="comments" value="<%= shareMessage %>" />
</liferay-portlet:actionURL>
<liferay-ui:icon image="share" url="<%= shareUrl %>"/>
并且你必须知道plid的概念:引用的页面布局id portletName:引用的portlet名称
renderURL 和 actionURL 是 Liferay 提供的扩展标准 tlds 的标签。注意:这种通信不是 Portlet JSR168 和 JSR286 标准的一部分。
plid是我们部署一个portlet所在页面的id,我们可以使用LayOutLocalService来查找id,或者直接在数据库中查询。
portletName 是portlet 的标识符,并且是portlet 的部署描述符的一部分。此 id 由 portletId+ WAR +thenameofwar组成,它封装了 portlet,如果 portlet 是可实例化的,则可以选择INSTANCE 。
我附上了一个带有请求和会话属性的简单 liferay-portlet.xml 的演示。
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 6.1.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_6_1_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>testRedirect</portlet-name>
<icon>/icon.png</icon>
<instanceable>false</instanceable>
<private-request-attributes>false</private-request-attributes>
<private-session-attributes>false</private-session-attributes>
<header-portlet-css>/css/main.css</header-portlet-css>
<footer-portlet-javascript>/js/main.js</footer-portlet-javascript>
<css-class-wrapper>testRedirect-portlet</css-class-wrapper>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power-user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>