在Liferay中生成指向不同Portlet的URL

4

目前我是通过以下方式生成到不同portlet的URL:

<liferay-portlet:actionURL var="custom" portletName="portlet2_WAR_portlet2">
   <portlet:param name="action" value="advanced"/>
   <portlet:param name="value" value="321"/>
</liferay-portlet:actionURL>

最重要的部分是 portletName 参数。我按照 Liferay页面上所说的方式构建它。问题在于,手动创建 portletName 很可怕。想象一下打字错误或名称更改......
所以我的问题是:是否有一个实用程序类、JSP标签(或类似物)能够自动创建有效的portlet名称(根据程序员提供的一些信息,例如portlet的名称)。
一个注意点:我的portlet是单例的,因此不需要INSTANCE参数。
2个回答

3
为了获取正确的Portlet名称,你必须拥有它的ID。
Liferay提供了com.liferay.portal.service.PortletLocalServiceUtil服务工具类和方法getPortletById(String id)。这将给你一个com.liferay.portal.model.Portlet对象,通过调用getPortletName()方法,你将得到Portlet名称。
内置Portlet的ID在com.liferay.portal.util.PortletKeys中可用,因此对于内置的Portlet,你不必硬编码ID。

你需要提供至少一些东西:),打字错误可以出现在任何地方!:D,犯错是人性的!:)。但是,要获取内置portlet的portlet ids,有一个接口/类持有portlet名称和ids的枚举,我会在拿到后告诉你。 - Felix Christy
1
对于我的自定义Portlets,我需要在portlet.xml中指定设置的<portlet-name>键吗? - Queequeg
是的,这是您的ID,因此您可以为您的项目拥有自己的PortletKeys,以便将来不必硬编码它。 - Felix Christy
但是该方法需要一个 long,而该名称是一个 String。另外请注意,我目前有一个很好的 JSP 标签,我不想开始将 Java 代码与我的布局混合在一起...那么我该如何使用上述类? - Queequeg
让我们继续在聊天室里讨论 - Felix Christy
显示剩余6条评论

3

Portlet名称很少改变,即使Liferay使用一个常量类(PortletKeys.java)来存储portlet Ids并经常使用它。

这就像portlet的主键一样,如果它发生变化,那可能意味着它是一个新的portlet。

因此,如果您的portlet依赖于第三方portlet,然后portlet的ID/名称发生更改,那么我认为除了将您的代码更改以匹配它之外,没有其他办法。

如果有其他好的方法,我也会很高兴知道。


你是提供答案还是评论? :) - Felix Christy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接