我想在一个门户组件中创建一个链接,以便可以导航到liferay门户中的另一个页面。为此,我正在寻找一个API(可以是特定于liferay的),它可以根据页面名称返回其URL(也可以是友好的URL)。
Liferay中的门户页面确实在API和数据库表中称为Layouts
。它们由plid
字段标识,可使用LayoutLocalServiceUtil
和相关API获取,还可以从一些其他调用(例如themeDisplay.getLayout()
)中获取。
但是,要构建包含页面URL的字符串,您必须连接门户、组和布局本身的友好URL(即/web/guest/home
- web
是公共页面的门户URL,guest
是默认情况下guest组的友好URL,home
是默认情况下主页/布局的友好URL)。这可能有点棘手,因为您必须检查这是公共页面还是私有页面等。
而且,一旦您开始使用虚拟主机和友好的群组URL,事情就会发生变化。所以这不是一个好方法。
为了避免手动创建URL并拥有保证正确的URL,您应该使用com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)
,这是PortalUtil
的静态方法 - 它将为您完成所有必要的工作。尽管您还需要提供ThemeDisplay
而不仅仅是Layout。
访问Liferay中页面的API是LayoutService。然而,在Liferay中,页面名称不是唯一的,而且它们还国际化了。因此,除了名称之外,您需要某些唯一属性来检索页面的URL。
如果您确实只有页面名称,可以使用LayoutLocalServiceUtil.getLayouts(...)循环遍历所有布局,并检查某些属性(在这种情况下是名称)。
try this one for current url
${themeDisplay.getURLCurrent()}
${themeDisplay.getPortalURL()}