首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liferay PortalUtil.getPlidFromPortletId不工作

Liferay PortalUtil.getPlidFromPortletId不工作
EN

Stack Overflow用户
提问于 2020-09-20 13:28:48
回答 1查看 190关注 0票数 1

我正在尝试创建一个从一个portlet到另一个portlet的链接,这两个portlet位于不同的页面中。注意,这两个页面确实存在于同一捆绑包中。

我在Liferay 6.x中广泛使用了这一点,但相同的代码在Liferay 7.3.4中不起作用。

我用来生成这个链接的代码如下:

代码语言:javascript
复制
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet"%>

<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%>
<%@ taglib uri="http://liferay.com/tld/frontend" prefix="liferay-frontend"%>
<%@ taglib uri="http://liferay.com/tld/portlet" prefix="liferay-portlet"%>
<%@ taglib uri="http://liferay.com/tld/theme" prefix="liferay-theme"%>
<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui"%>
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util"%>

<liferay-theme:defineObjects />
<portlet:defineObjects />

<%
    long myThemeId = themeDisplay.getScopeGroupId();
    String orgCreatePortletName = com.xyz.portal.masterdata.organization.constants.OrganizationPortletKeys.OrganizationCreate;
    long orgCreatePlid = com.liferay.portal.kernel.util.PortalUtil.getPlidFromPortletId(myThemeId, orgCreatePortletName);
%>

<br />
myThemeId: <%=myThemeId%>
<br />
orgCreatePlid: <%=orgCreatePlid%>
<br />
orgCreatePortletName: <%=orgCreatePortletName%>
<br />

我要生成链接的页面的组件声明如下:

代码语言:javascript
复制
@Component(immediate = true, property = {
        "com.liferay.portlet.display-category=" + OrganizationPortletKeys.OrganizationCategory,
        "com.liferay.portlet.header-portlet-css=/css/main.css",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=Organization - Create",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/organizationCreate/view.jsp",
        "javax.portlet.init-param.copy-request-parameters=true",
        "javax.portlet.name=" + OrganizationPortletKeys.OrganizationCreate,
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
}, service = Portlet.class)
public class OrganizationCreatePortlet extends MVCPortlet

Liferay项目是使用Maven构建的,在pom.xml中可以找到以下依赖项:

代码语言:javascript
复制
<dependencies>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.asset.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.comment.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.frontend.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.frontend.taglib.dynamic.section</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.frontend.taglib.form.navigator</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.frontend.taglib.util</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.journal.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.layout.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.site.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay.portal</groupId>
        <artifactId>com.liferay.portal.kernel</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay.portal</groupId>
        <artifactId>com.liferay.util.taglib</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.portal.security.sso.openid</artifactId>
        <version>4.0.14</version>
    </dependency>
    <dependency>
        <groupId>javax.portlet</groupId>
        <artifactId>portlet-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.osgi</groupId>
        <artifactId>org.osgi.service.component.annotations</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>
    <dependency>
        <groupId>org.glassfish.web</groupId>
        <artifactId>jstl-impl</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.10.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.liferay</groupId>
        <artifactId>com.liferay.portal.security.sso.openid.connect.api</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

生成的页面如下所示,展示了PortalUtil.getPlidFromPortletId的无效结果:

代码语言:javascript
复制
myThemeId: 20122
orgCreatePlid: 0
orgCreatePortletName: com_xyz_portal_masterdata_organization_OrganizationCreatePortlet

对于PortalUtil.getPlidFromPortletId(),我得到的结果是零,这不应该是这种情况。

同样,这在我之前用Liferay6.2构建的项目中工作得很好。我没有在Liferay 7.3.4上获得同样的成功。

我很好奇是否有人遇到过类似的问题。

谢谢,兰迪

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-24 15:00:27

好吧,我想通了。下面的相关问题对我们有一点帮助:

https://issues.liferay.com/browse/LPS-74443?page=com.atlassian.streams.streams-jira-plugin%3Aactivity-stream-issue-tab

本期讨论了使用getPlidFromPortletId处理特定页面类型的问题,例如全页面应用程序。

经过一些试验后,很明显,getPlidFromPortletId不适用于内容页面中嵌入的portlets,但可以很好地适用于Widget Page中嵌入的portlets。

我不确定这是不是一个bug。但是那些希望使用getPlidFromPortletId的人应该使用Widget页面。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63975811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档