PortalUtil.getOriginalServletRequest和PortalUtil.getHttpServletRequest有什么区别?

我想知道它们之间的区别

PortalUtil.getOriginalServletRequest(portletRequest) 

 PortalUtil.getHttpServletRequest(portletRequest). 

查看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); 

我希望这有帮助!

尽管这个问题已经有了一个公认的答案,但我发现还有一些值得思考的问题:有时你想通过HttpServletRequest的接口传递请求 – 因为某些接口需要它。 这将留下PortletRequest的所有名称错位(例如,您可以调用getParameter(“name”)而无需自己命名)。

另一方面,有时你可能想要使用hack并从实际(“原始”)HttpServletRequest中获取一个实际上未编译的参数,然后再进行修改。

这就是你使用这两种方法的原因:只需调整界面与从原始Http级别获取实际数据