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

Vij*_*hmi 9 portlet liferay liferay-6

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

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

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

有没有办法通过使用portlet的名称来获取portlet的Id.我有一个workaroud来获取所有portlet并进行比较,但如果我可以使用portlet的名称直接获取portlet的Id,那将会很有帮助.

它的紧急,如果有人知道请回复,这将是非常有帮助的.

提前致谢

Pra*_*h K 12

如果仔细查看如何根据Portlet名称生成Portlet Id,您将得到答案.

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

portlet-id的模式: <portletname in xml>_WAR_<servlet context name i.e. the war file without any special characters such as the hyphen>

例如:如果您的portlet名称已MyWork定义,portlet.xml并且文件webapps夹中生成的文件(如果您使用的是tomcat)MyWork-portlet则结果为Id MyWork_WAR_MyWorkportlet.

现在,如果你有Liferay的源代码,你可以看看PortletLocalServiceImplprivate _readPortletXML方法.

编辑:
如果您想在特定页面上找到portlet(给定friendly-url页面),那么您可能会发现此答案很有帮助.

  • - 验证连接到liferay DB porltet表并检查来自portlet的portletid colume-SELECT*; 我发现在liferay 6.1中它是<portletname without -._> _ WAR_ <已部署的war文件名 - 在tomcat中的webapps下,再次withour -._> (2认同)

小智 5

你可以试试这个:

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

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

System.out.println("Portlet Name: " + themeDisplay.getPortletDisplay().getPortletName());
Run Code Online (Sandbox Code Playgroud)

不要忘记:

<% ThemeDisplay themeDisplay = (ThemeDisplay) request.getAttribute(WebKeys.THEME_DISPLAY);
    themeDisplay.getUser().getScreenName(); %>
Run Code Online (Sandbox Code Playgroud)