【问题标题】:Generate an URL to different portlet in Liferay在 Liferay 中生成指向不同 portlet 的 URL
【发布时间】:2012-06-19 13:20:56
【问题描述】:

目前我以这种方式生成一个指向不同 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's page 上所说的那样构建它。问题是,手动创建portletName 是可怕的。想象一下一个错字,一个名字的改变......

所以我的问题是:是否有一个实用程序类、jsp 标记(或类似标签)能够自动创建有效的 portlet 名称(给定来自程序员的一些信息,例如 portlet 的名称)。

有一件事:我的 portlet 是单例的,所以不需要 INSTANCE 参数。

【问题讨论】:

    标签: java liferay portlet


    【解决方案1】:

    为了获得正确的 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 中可用,因此,您不必硬编码 ID(至少对于内置 portlet)。

    【讨论】:

    • 但我们不能再用 ID 打错字吗? ;-)
    • 你至少需要提供一些东西:),你可以做任何错字! :D,犯错是人! :)。但是,要获取内置 portlet 的 portlet id,有一个接口/类包含 portlet 名称和 id 的枚举,一旦我得到它就会告诉你
    • 知道了,请使用com.liferay.portal.util.PortletKeys,这里保存了portlet类和id的映射。所以,现在对于内置的 portlet,您不必硬编码,您将拥有来自 PortletKeys.BLOGS 或任何东西,您将获得一个 id,从该 id,您将获得 Portlet 对象等等。接受真相(作为答案)
    • 对于我自己的portlet,我需要在portlet.xml 中指定&lt;portlet-name&gt; 中设置的密钥?
    • 是的,它是你的 id,所以你可以为你的项目拥有自己的 PortletKey,这样以后你就不必硬编码了。
    【解决方案2】:

    Portlet 名称几乎没有变化,即使 Liferay 使用常量类 (PortletKeys.java) 来存储 Portlet Id 并经常使用它。

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

    因此,如果您的 portlet 依赖于第三方 portlet,然后 portlet 的 ID/名称发生更改,那么我看不到任何其他方法,只能更改您的代码以匹配它。

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

    【讨论】:

    • 您提供答案或评论? :)
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多