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

时间:2012-06-22 06:15:36

标签: liferay liferay-6 portlet

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

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

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

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

紧急,如果有人知道请回复,那将会有很大的帮助。

先谢谢

2 个答案:

答案 0 :(得分:11)

如果仔细查看如何根据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>

例如: 如果您在MyWork中定义的portlet名称为portlet.xml,并且webapps文件夹中生成的文件(如果您使用的是tomcat)为MyWork-portlet,则生成的Id将为{{} 1}}。

现在,如果你有liferay源代码,你可以查看PortletLocalServiceImplMyWork_WAR_MyWorkportlet方法。

修改
如果您想在特定页面上找到portlet(给定页面的private _readPortletXML),那么您可能会发现此answer有用。

答案 1 :(得分:2)

你可以试试这个:

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(); %>