【发布时间】:2011-06-16 13:03:45
【问题描述】:
我想在 portlet 中创建一个链接,以便可以导航到 liferay 门户中的不同页面。我命令这样做,我正在寻找一个 API(可以是 liferay 特定的),它给定一个页面名称,会返回它的 url(它也可以是friendlyURL)。
【问题讨论】:
我想在 portlet 中创建一个链接,以便可以导航到 liferay 门户中的不同页面。我命令这样做,我正在寻找一个 API(可以是 liferay 特定的),它给定一个页面名称,会返回它的 url(它也可以是friendlyURL)。
【问题讨论】:
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 而不仅仅是布局。
【讨论】:
在 Liferay 中访问页面的 API 是 LayoutService。然而,页面名称在 Liferay 中并不是唯一的,而且它们是国际化的。因此,除了名称之外,您还需要一些独特的页面属性来检索其 url。
如果你真的只有页面名称,你可以使用 LayoutLocalServiceUtil.getLayouts(...) 来遍历所有 Layouts 并检查一些属性(在这种情况下是它的名称)。
【讨论】:
至少在 Liferay 6.1.20 中,可以使用“将 Portlet URL 链接到页面”来使链接继续到您门户中的另一个页面。它位于 portlet 的“外观”菜单项下。对我来说这很好用。
干杯
【讨论】:
为当前网址试试这个
${themeDisplay.getURLCurrent()}
试试这个作为门户网址
${themeDisplay.getPortalURL()}
【讨论】: