假设我有Layout实例(Java或JSP),我想获得它的URL。
Layout表示一个页面。页面有"友好的URL",我可以通过friendlyURL
属性获得它。
但是FULL url呢?
我也可以得到scopeGroup
的友好url,其中
Group scopeGroup = themeDisplay.getScopeGroup();
,得到更短的部分,这也不完整。
Company.getPortalURL
也不包含所有其他文本(不包括port和"/web"部分)。
在ROOThtmlportletlayouts_adminlayoutdetails.jsp
中,我发现了以下代码来构建它
boolean privateLayout = ((Boolean)renderRequest.getAttribute("edit_pages.jsp-privateLayout")).booleanValue();
Layout selLayout = (Layout)renderRequest.getAttribute("edit_pages.jsp-selLayout");
StringBuilder friendlyURLBase = new StringBuilder();
friendlyURLBase.append(themeDisplay.getPortalURL());
LayoutSet layoutSet = selLayout.getLayoutSet();
String virtualHostname = layoutSet.getVirtualHostname();
if (Validator.isNull(virtualHostname) || (friendlyURLBase.indexOf(virtualHostname) == -1)) {
friendlyURLBase.append(scopeGroup.getPathFriendlyURL(privateLayout, themeDisplay));
friendlyURLBase.append(scopeGroup.getFriendlyURL());
}
但是这个代码是基于奇怪的参数edit_pages.jsp-privateLayout
和edit_pages.jsp-selLayout
,我担心在正常的portlet中无法访问。
那么,如何获得页面实例的完整URL ?
试试这个:
PortalUtil.getLayoutFullURL(layout, themeDisplay)