Liferay 使动态添加的portlet与调用portlet具有相同的scopeGroupId 问题

Liferay 使动态添加的portlet与调用portlet具有相同的scopeGroupId 问题,liferay,ipc,liferay-6,portlet,Liferay,Ipc,Liferay 6,Portlet,当通过另一个portlet(比如abc portlet)中的链接以弹出式显示portlet(比如测试portlet)时,测试portlet中显示的scopeGroupId始终是groupId,而不是为abc portlet配置的页面范围id或scopeGroupId 如果问题不清楚,更多细节如下 基本上我所做的就是本文中提到的。我将在下面简要介绍 我们所做的 创建了一个自定义portlet-测试portlet 已使该portlet的作用域为true 我们还添加了-,所以经过一番搜索,终于找到了l

当通过另一个portlet(比如abc portlet)中的链接以弹出式显示portlet(比如测试portlet)时,测试portlet中显示的
scopeGroupId
始终是groupId,而不是为abc portlet配置的页面范围id或scopeGroupId

如果问题不清楚,更多细节如下

基本上我所做的就是本文中提到的。我将在下面简要介绍

我们所做的
  • 创建了一个自定义portlet-测试portlet
  • 已使该portlet的作用域为true

  • 我们还添加了-

    ,所以经过一番搜索,终于找到了liferay是如何做到这一点的。提示来自以下中的源代码:

    Liferay在添加或编辑资源时,在
    相关资源中使用此功能添加博客、wiki、文档、文件夹等,因此检查JSP
    /html/portlet/asset\u browser/toolbar.JSP
    ,查看URL是如何生成的

    Liferay的步骤与我想做的类似:

  • 提供打开资产portlet(例如:Blog)的链接以添加条目
  • 打开的弹出窗口具有与底层portlet相同的scopeGroupId(例如:文档和媒体)
  • 有人会认为属性
    doAsGroupId
    正好适合这种情况。是的,它是必需的,但仅仅它是不够的,令人惊讶的是,另一个必需的属性是
    plid
    。默认情况下,
    plid
    将是用户所在的当前页面/布局,URL将针对当前页面创建,但此默认值没有帮助

    需要将
    plid
    设置为
    控制面板的plid

    下面是我们在abc portlet中编写的示例renderURL,用于在弹出窗口中打开测试portlet,请注意
    
    
    想知道为什么liferay想到使用
    plid=”“
    ,而不仅仅是看起来很简单的
    doAsGroupId

    注意:我还发现,如果我们使用
    plid=“
    我们不需要在
    liferayportlet.xml中使用
    true
    ,如果需要动态添加资源,这是必不可少的


    希望这对别人有帮助。

    如果还有其他更简单的方法,我会支持的。谢谢这很奇怪为什么
    doAsGroupId
    不能单独工作,为什么它需要控制面板布局?可能是因为一个布局已经在一个特定的组中,它不能以不同的方式工作,这也可以说是控制面板,但我们都知道控制面板非常特殊;-)
    if (!group.isControlPanel()) {
        doAsGroupId = 0;
    }
    
    <%
    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>