我想知道
之间的区别PortalUtil.getOriginalServletRequest(portletRequest)
和
PortalUtil.getHttpServletRequest(portletRequest).
答案 0 :(得分:5)
即使这个问题已经有了一个公认的答案,我发现还有一些值得思考的问题:有时候你想通过HttpServletRequest的接口传递请求 - 因为某些接口需要它。这将留下PortletRequest的所有名称修改(例如,您可以调用getParameter(“name”)而不需要自己命名)。
另一方面,有时候你可能想要使用hack并从实际(“原始”)HttpServletRequest中获取一个实际未编译的参数,然后再进行修改。
这就是你使用这两种方法的原因:只需调整界面与从原始Http级别获取实际数据
答案 1 :(得分:4)
查看Liferay 6的源代码(我假设你在谈论6)你可以看到PortalUtil.getOriginalServletRequest做了什么,我已经放置了下面的代码:
public HttpServletRequest getOriginalServletRequest(
HttpServletRequest request) {
HttpServletRequest originalRequest = request;
while (originalRequest.getClass().getName().startsWith(
"com.liferay.")) {
// Get original request so that portlets inside portlets render
// properly
originalRequest = (HttpServletRequest)
((HttpServletRequestWrapper)originalRequest).getRequest();
}
return originalRequest;
}
正如评论所说,“获取原始请求,以便portlet中的portlet正确呈现”。您可能只需要针对嵌套的portlet情况或类似情况。大多数时候你只需要使用:
PortalUtil.getHttpServletRequest(portletRequest);
我希望这有帮助!