如何从给定URL获取有效的Liferay布局
要求很简单: 给定一个URL,如何确定它对应于哪个如何从给定URL获取有效的Liferay布局,liferay,hook,url-routing,liferay-6,Liferay,Hook,Url Routing,Liferay 6,要求很简单: 给定一个URL,如何确定它对应于哪个布局? 我需要这样做的原因是,对于满足特定条件的某些布局,我需要根据用户的角色/用户组将它们重定向到某个其他布局。我使用过滤器挂钩来实现这一点 例如: 所有这些都是相同的布局: http://localhost:8080/web/guest/home转到来宾的主页 偶数http://localhost:8080/home如果设置了虚拟主机,也会转到来宾的主页 http://localhost:8080/web/guest/home?someth
布局?
我需要这样做的原因是,对于满足特定条件的某些布局,我需要根据用户的角色/用户组将它们重定向到某个其他布局。我使用过滤器挂钩来实现这一点
例如:
所有这些都是相同的布局:
转到来宾的主页http://localhost:8080/web/guest/home
- 偶数
如果设置了虚拟主机,也会转到来宾的主页http://localhost:8080/home
也会进入主页http://localhost:8080/web/guest/home?something=isSomething&etc
http://localhost:8080/combo?someparameters
谢谢在上面的示例中,/home是布局的友好url。第二个url再次转到/home,因为/home是默认的公共登录页。第三个url再次返回主url,因为它与第一个url相同,但有一些附加参数(在“?”之后) 你可以看看: LayoutLocalServiceUtil.fetchLayoutByFriendlyURL(long groupId, boolean privateLayout, String friendlyURL) LayoutLocalServiceUtil.fetchLayoutByFriendlyURL(长组ID、布尔私有布局、字符串friendlyURL) 这里的“groupId”是友好url为“/guest”的组。您可以使用GroupLocalServiceUtil.fetchFriendlyURLGroup(长公司ID,字符串friendlyURL)获取该组 只要“/web”通常指向公共区域,这里的“privateLayout”就是错误的 这里的“friendlyURL”是您的“/家”
希望这有帮助 此代码允许从您拥有的友好URL获取完整的URL。假设您有一个友好的URL,其格式为
/view/users
,现在您需要执行一个来自bean的重定向方法。您将无法执行上下文重定向(“/view/users”)。您需要完整的URL,为此您可以使用此代码。优点是它可以找到当前的groupID,而无需硬编码。第一步是获得主题。接下来,根据您的友好URL获得目标页面的布局。最后,从这个布局中可以得到它的URL
getPortletRequest
是:
private PortletRequest getPortletRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance();
Object obj = facesContext.getExternalContext().getRequest();
if (obj instanceof PortletRequest) {
PortletRequest pr = (PortletRequest) obj;
return pr;
}
return null;
}
如果在
processFilter
方法中编写此逻辑,则可以直接从request
参数获取Layout
对象,如:
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Layout;
...
Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);
这不允许您仅在给定字符串URL的情况下获取
布局
对象,但如果您在过滤器挂钩中,这可能就是您想要做的。谢谢。但这是我已经在做的,我正在解析URL,以获得组和最后一个路径作为友好URL传递。如果这个问题不清楚,请原谅。但也有类似http://localhost:8080/combo?someparameters
等类似于http://localhost:8080/home?someparameters
但liferay在内部使用它们来打包一些css和js。因此,我如何知道这是否是一个有效的布局或liferay关键字或其他内容。我没有使用任何面
,但我仍然无法理解代码。请详细说明您正在尝试做什么?谢谢你,你打算在哪里写这段代码?正如我所说,我正在使用过滤器,这将在过滤器挂钩工作?我还是会试试这个。谢谢您可以在托管bean中编写它。不确定面上下文是否在过滤器中可用
String completeUrl = PortalUtil.getLayoutFullURL(destinationLayout , theme);
private PortletRequest getPortletRequest() {
FacesContext facesContext = FacesContext.getCurrentInstance();
Object obj = facesContext.getExternalContext().getRequest();
if (obj instanceof PortletRequest) {
PortletRequest pr = (PortletRequest) obj;
return pr;
}
return null;
}
import com.liferay.portal.kernel.util.WebKeys;
import com.liferay.portal.model.Layout;
...
Layout layout = (Layout)request.getAttribute(WebKeys.LAYOUT);