当通过另一个portlet中的链接(例如abc-portlet)弹出窗口中显示portlet(比如test-portlet)时,test-portlet中显示的scopeGroupId
始终是groupId而不是页面-scope-id或scopeGroupId,为abc-portlet配置。
如果问题不明确,请参阅更多详细信息。
基本上我所做的就是这个answer中提到的内容。将在下面给出简要说明。
<scopeable>true</scopeable>
<add-default-resource>true</add-default-resource>
任何指示方向都会有很大的帮助。
环境:与Tomcat捆绑的Liferay 6.2 EE
由于
注意:还要在Liferay Developer Forum上交叉发布此内容。
答案 0 :(得分:1)
所以经过一番搜索后终于找到了liferay是如何做到的。该提示来自ServicePreAction中的源代码:
if (!group.isControlPanel()) {
doAsGroupId = 0;
}
Liferay在Related Assets
中使用此功能在添加或编辑资源时添加博客,wiki,文档,文件夹等,因此请检查JSP /html/portlet/asset_browser/toolbar.jsp
以查看如何网址已经完成。
有人会认为属性doAsGroupId
恰好适合这种情况。是的,它是必不可少的,但它是不够的,令人惊讶的是,其他必要的属性是plid
。默认情况下,plid
将是用户所在的当前页面/布局,并且将针对当前页面创建URL,但此默认值无效。
plid
需要设置为Control Panel
!
以下是我们在abc-portlet中编写的示例renderURL,用于在弹出窗口中打开test-portlet,注意doAsGroupId="<%=scopeGroupId %>" and plid="<%=controlPanelPlid %>"
的属性<liferay-portlet:renderURL
:
<%
long controlPanelPlid = PortalUtil.getControlPanelPlid(company.getCompanyId());
%>
<liferay-portlet:renderURL var="testPortletURL" portletName="test_WAR_testportlet" windowState="<%=LiferayWindowState.POP_UP.toString() %>"
doAsGroupId="<%=scopeGroupId %>" plid="<%=controlPanelPlid %>" refererPlid="<%=plid %>">
<liferay-portlet:param name="referringPortletResource" value="abc_WAR_abcportlet" />
</liferay-portlet:renderURL>
<%
String testPortletURLJavascript = "javascript:Liferay.Util.openWindow({dialog: {destroyOnHide: true}, id: 'test', title: 'Test Portlet View', uri: '" + HtmlUtil.escapeJS(testPortletURL) + "'});";
%>
<h4><a href="<%=testPortletURLJavascript%>">Click here to open test portlet in pop-up</a></h4>
不知道为什么liferay会考虑使用plid="<%=controlPanelPlid %>"
而不仅仅是doAsGroupId
,而这似乎很简单。
注意:我还发现,如果我们使用plid="<%=controlPanelPlid %>"
,我们就不需要在<add-default-resource>true</add-default-resource>
中liferay-portlet.xml
,这对资源非常重要需要动态添加。
希望这有助于某人。