我想在portlet中创建链接,以便可以导航到liferay门户中的其他页面。我要这样做是要寻找一个给定页面名称的API(可能是liferay专用的),该API会返回其url(也可以是friendlyURL)。
用于访问Liferay中的页面的API是LayoutService。但是,页面名称在Liferay中不是唯一的,而且它们已被国际化。因此,除了名称之外,您还需要页面的一些唯一属性来检索其URL。
如果您确实只有页面名称,则可以使用LayoutLocalServiceUtil.getLayouts(...)遍历所有Layouts并检查某些属性(在本例中为它的名称)。
Liferay中的门户页面在API和DB表中确实称为Layouts
。它们由plid
字段标识,可以使用LayoutLocalServiceUtil
和相关API以及从其他一些调用(例如themeDisplay.getLayout()
)获得。
但是,为了构建包含URL到页面的字符串,您必须连接门户,组和布局本身的友好URL(即/web/guest/home
-web
是公共页面的门户URL,guest
是友好URL来宾组的默认网址,home
是主页/布局的友好网址)。这可能很棘手,因为您必须检查这是公共页面还是私有页面,等等。
并且一旦您开始使用带有友好URL的虚拟主机进行分组,情况就会发生变化。因此,这不是一个好方法。
为了避免手动创建URL并确保URL正确,您应该使用com.liferay.portal.util.PortalUtil.getLayoutFriendlyURL(Layout layout, ThemeDisplay themeDisplay)
静态方法PortalUtil
-它会为您完成所有必要的工作。尽管您还需要提供ThemeDisplay
,而不仅是布局。
至少在Liferay 6.1.20中,可以使用“将Portlet URL链接到页面”来使链接继续到门户网站中的另一页面。它在portlet的“外观”菜单项下。对我来说,这很好。
欢呼声
尝试使用此作为当前网址
${themeDisplay.getURLCurrent()}
尝试此作为门户网址
${themeDisplay.getPortalURL()}