我需要使用portlet名称获取资源权限。
我将使用portlet的名称而不是Id。
portlet的资源许可权名称是该portlet的Id。我检查了Portlet表,它只有Id和其他信息。 portlet的其他属性保存在哪里?。
有没有办法通过使用portlet的名称来获取portlet的Id。我有一个workaroud来获取所有portlet并进行比较,但如果我可以使用portlet的名称直接获取portlet的Id,那将会有所帮助。
紧急,如果有人知道请回复,那将会有很大的帮助。
先谢谢
答案 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源代码,你可以查看PortletLocalServiceImpl
的MyWork_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(); %>