【问题标题】:Programmatically get the url of a page in liferay以编程方式获取liferay中页面的url
【发布时间】:2011-06-16 13:03:45
【问题描述】:

我想在 portlet 中创建一个链接,以便可以导航到 liferay 门户中的不同页面。我命令这样做,我正在寻找一个 API(可以是 liferay 特定的),它给定一个页面名称,会返回它的 url(它也可以是friendlyURL)。

【问题讨论】:

    标签: liferay liferay-6


    【解决方案1】:

    Liferay 中的门户页面在 API 和数据库表中确实称为 Layouts。它们由plid 字段标识,可以使用LayoutLocalServiceUtil 和相关API 获取,也可以通过themeDisplay.getLayout() 等其他一些调用获取。

    但是,为了构建包含页面 URL 的字符串,您必须连接门户、组和布局本身的友好 URL(即 /web/guest/home - web 是公共页面的门户 URL,guest 是友好的默认访客组 URL,home 默认为主页/布局的友好 URL)。这可能很棘手,因为您必须检查这是公共页面还是私有页面等。

    一旦您开始为群组使用带有友好 URL 的虚拟主机,情况就会发生变化。所以这不是一个好方法。

    为避免手动创建 URL 并确保 URL 正确,您应该使用 com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay) 的静态方法 PortalUtil - 它会为您完成所有必要的工作。虽然您还需要提供ThemeDisplay 而不仅仅是布局。

    【讨论】:

      【解决方案2】:

      在 Liferay 中访问页面的 API 是 LayoutService。然而,页面名称在 Liferay 中并不是唯一的,而且它们是国际化的。因此,除了名称之外,您还需要一些独特的页面属性来检索其 url。

      如果你真的只有页面名称,你可以使用 LayoutLocalServiceUtil.getLayouts(...) 来遍历所有 Layouts 并检查一些属性(在这种情况下是它的名称)。

      【讨论】:

      • FriendlyURL 不是唯一的 AFAIK。不同组中的两个页面(布局)可以具有相同的友好 URL。实际上他们会,因为当您创建新组时,您通常会创建带有“/home”友好 URL 的页面。问题是页面(布局)的友好 URL 不包含完整路径(如“/web/guest/home”、“/web/user/home”),而只包含其中的一部分。
      【解决方案3】:

      至少在 Liferay 6.1.20 中,可以使用“将 Portlet URL 链接到页面”来使链接继续到您门户中的另一个页面。它位于 portlet 的“外观”菜单项下。对我来说这很好用。

      干杯

      【讨论】:

        【解决方案4】:

        为当前网址试试这个

        ${themeDisplay.getURLCurrent()}
        

        试试这个作为门户网址

        ${themeDisplay.getPortalURL()}
        

        【讨论】:

          猜你喜欢
          • 2015-12-25
          • 2011-03-16
          • 2016-01-28
          • 2019-06-15
          • 2017-10-09
          • 1970-01-01
          • 2012-10-20
          • 1970-01-01
          相关资源
          最近更新 更多