如何生成Liferay的portlet名称?

5 java portlet liferay liferay-6

在大多数情况下,有必要知道Liferay portlet的实际名称.

特别是在Liferay的主题中,我可以添加"Login portlet",如下所示:

$theme.runtime("58", "", $velocityPortletPreferences.toString())
Run Code Online (Sandbox Code Playgroud)

它有效.但是当我尝试添加一些ID为"some-portlet-id"的自定义portlet时

$theme.runtime("some-portlet-id", "", $velocityPortletPreferences.toString())
Run Code Online (Sandbox Code Playgroud)

它不起作用.我怀疑,Liferay portlet的名称不等于portlet的ID.

在这种情况下,有人可以解释一下,这些名称是如何生成的?

提前致谢.

n1c*_*las 10

如果portlet在Liferay门户中,即portlet ID等于portlet的名称,即ROOT.

但是如果你试图在其他war文件中获取portlet的名称(例如插件环境),在这种情况下,将根据此规则生成portlet名称:

[portlet ID] + _WAR_ + [webapp name, where portlet is placed]
Run Code Online (Sandbox Code Playgroud)

请注意,这两个portlet IDwebapp name排除-从他们的名字.

因此,如果您some-portlet-id在WAR-file中有id some-portlet的portlet,那么portlet名称如下所示:

someportletid_WAR_someportlet
Run Code Online (Sandbox Code Playgroud)

这也是Liferay的主题名称.

另请注意,Liferay portlet的名称也有可选的实例ID:

[portlet ID] + _WAR_ + [webapp name, where portlet is placed] + _INSTANCE_ + [portlet instance ID]
Run Code Online (Sandbox Code Playgroud)

对于那些portlet来说,它们是必需的,这instansable是真的.这基本上是4个任意字母.

someportletid_WAR_someportlet_INSTANCE_abcd
Run Code Online (Sandbox Code Playgroud)

但是请小心他们,因为你可以忽略那些实例ID并放置你想要的一切.但是如果你需要使用一些预先填充的数据(例如portlet首选项)来获取特定实例,那么你肯定需要以某种方式知道它.