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

时间:2012-01-20 10:38:01

标签: java liferay portlet

我想知道

之间的区别
PortalUtil.getOriginalServletRequest(portletRequest) 

PortalUtil.getHttpServletRequest(portletRequest).

2 个答案:

答案 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);

我希望这有帮助!