Liferay PortalUtil.getPlidFromPortletId 不工作
Liferay PortalUtil.getPlidFromPortletId not working
我正在尝试创建一个从一个 portlet 到另一个 portlet 的 link,其中两个 portlet 驻留在不同的页面中。请注意,这两个页面确实存在于同一个包中。
我在 Liferay 6.x 中广泛使用了它,但相同的代码在 Liferay 7.3.4 中不起作用。
我用来生成这个 link 的代码如下:
<%@ 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 />
我正在生成 link 的页面的组件声明如下:
@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 中找到以下依赖项:
<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的无效结果:
myThemeId: 20122
orgCreatePlid: 0
orgCreatePortletName: com_xyz_portal_masterdata_organization_OrganizationCreatePortlet
我得到的 PortalUtil.getPlidFromPortletId() 结果是零,不应该是这样的。
同样,这在我之前使用 Liferay 6.2 构建的项目中运行得很好。我在 Liferay 7.3.4 上没有获得同样的成功。
想知道是否有人遇到过类似的问题。
谢谢,
兰迪
好的,我明白了。以下相关问题有点帮助:
这个问题讨论了 getPlidFromPortletId 对特定页面类型(例如完整页面应用程序)的工作问题。
经过一些试验后,getPlidFromPortletId 显然不适用于内容页面中嵌入的 portlet,但对于小部件页面中嵌入的 portlet 却可以正常工作。
我不确定这是否是错误。但是那些希望使用 getPlidFromPortletId 的人应该使用 Widget Pages。
我正在尝试创建一个从一个 portlet 到另一个 portlet 的 link,其中两个 portlet 驻留在不同的页面中。请注意,这两个页面确实存在于同一个包中。
我在 Liferay 6.x 中广泛使用了它,但相同的代码在 Liferay 7.3.4 中不起作用。
我用来生成这个 link 的代码如下:
<%@ 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 />
我正在生成 link 的页面的组件声明如下:
@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 中找到以下依赖项:
<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的无效结果:
myThemeId: 20122
orgCreatePlid: 0
orgCreatePortletName: com_xyz_portal_masterdata_organization_OrganizationCreatePortlet
我得到的 PortalUtil.getPlidFromPortletId() 结果是零,不应该是这样的。
同样,这在我之前使用 Liferay 6.2 构建的项目中运行得很好。我在 Liferay 7.3.4 上没有获得同样的成功。
想知道是否有人遇到过类似的问题。
谢谢, 兰迪
好的,我明白了。以下相关问题有点帮助:
这个问题讨论了 getPlidFromPortletId 对特定页面类型(例如完整页面应用程序)的工作问题。
经过一些试验后,getPlidFromPortletId 显然不适用于内容页面中嵌入的 portlet,但对于小部件页面中嵌入的 portlet 却可以正常工作。
我不确定这是否是错误。但是那些希望使用 getPlidFromPortletId 的人应该使用 Widget Pages。