10

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

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

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

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

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

提前致谢

4

2 回答 2

13

如果您仔细查看如何根据 Portlet Name 生成 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 源代码,你可以看看PortletLocalServiceImpl'sprivate _readPortletXML方法。

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

于 2012-06-23T08:47:52.243 回答
4

你可以试试这个:

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(); %>
于 2015-07-08T13:43:18.347 回答