如何在Liferay中使用Portlet名称获取Portlet Id?

如何在Liferay中使用Portlet名称获取Portlet Id?,liferay,liferay-6,portlet,Liferay,Liferay 6,Portlet,我需要使用portlet名称获取资源权限 我将使用portlet的名称,而不是Id portlet的资源权限名称是该portlet的Id。我检查了portlet表,它只有Id和其他信息。portlet的其他属性将保存在哪里 有没有一种方法可以通过使用portlet的名称来获取portlet的Id。我有一个解决方案来获取所有portlet并进行比较,但是如果我可以使用portlet的名称直接获取portlet的Id,这将非常有用 它很紧急,如果有人知道,请回复,这将是很大的帮助 提前感谢如果您仔细

我需要使用portlet名称获取资源权限

我将使用portlet的名称,而不是Id

portlet的资源权限名称是该portlet的Id。我检查了portlet表,它只有Id和其他信息。portlet的其他属性将保存在哪里

有没有一种方法可以通过使用portlet的名称来获取portlet的Id。我有一个解决方案来获取所有portlet并进行比较,但是如果我可以使用portlet的名称直接获取portlet的Id,这将非常有用

它很紧急,如果有人知道,请回复,这将是很大的帮助


提前感谢

如果您仔细研究如何基于Portlet名称生成Portlet Id,您将得到答案

这是一个遵循的常量模式,因此您可以像liferay那样构造Portlet Id,如果您有名称的话。Liferay还借助portlet名称构造ID

portlet id的模式:
\u WAR\u

例如: 如果您的portlet名称是在
portlet.xml
中定义的
MyWork
,并且
webapps
文件夹中生成的文件(如果您使用的是tomcat)是
MyWork portlet
,那么结果Id将是
MyWork\u WAR\u MyWorkportlet

现在,如果您有liferay源代码,您可以查看的
private\u readPortletXML
方法

编辑:
如果您想在特定页面上查找portlet(给定页面的
友好url
),您可能会发现这很有用。

您可以尝试以下方法:

System.out.println("ID : " + themeDisplay.getPortletDisplay().getId());

System.out.println("InstanceID: " + themeDisplay.getPortletDisplay().getInstanceId());

System.out.println("Portlet Name: " + themeDisplay.getPortletDisplay().getPortletName());
别忘了:

<% ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    themeDisplay.getUser().getScreenName(); %>


谢谢你,普拉卡什。但是,如果部署了多个war,我如何知道servlet上下文名称,即war文件名呢。我确实知道portlet id是如何构造的。我将在不同的servlet上下文中使用许多portlet。同一个portlet在同一个实例上的多个WAR?还是一场打包了许多portlet的战争?如果您能详细介绍一下环境,那么使用多个可实例化的Portlet进行一次war将会很有帮助。我还注意到portlet id将附加实例信息。在那种情况下如何处理。如果我将它部署在不同的服务器上,实例id就会不同。@Vijayalakshmi:对于一个war多个Portlet,我的答案很好。现在实例信息是完全不同的情况。因为实例信息与页面/布局相关,因此不存储在
Portlet
表中,而是存储在
layout
表的
typeSettings
列中。您可以编辑您的问题,以包括您想要的
实例
信息,这在您的问题中根本不清楚。-要验证连接到liferay DB porltet表并检查portletid列,请从portlet中选择*;我发现在liferay 6.1中,这是一场战争_