What is the difference between PortalUtil.getOriginalServletRequest and PortalUtil.getHttpServletRequest?

假装没事ソ 提交于 2019-11-30 22:57:00

Looking at the source code for Liferay 6 (I'm assuming your're talking about 6) you can see what PortalUtil.getOriginalServletRequest does and I've placed the code below:

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;
}

So as the comment says, "Get original request so that the portlets inside portlets render properly". You'll probably only require this for a nested portlet situation or similar. Most of the time you will just need to use:

PortalUtil.getHttpServletRequest(portletRequest);

I hope this helps!

Even though the question already has an accepted answer I find there's something worth thinking along: Sometimes you want to pass requests around through the interface of a HttpServletRequest - because some interface requires it. This will leave all the name-mangling of a PortletRequest in place (e.g you can call getParameter("name") without un-namemangling it yourself).

On the other hand, sometimes you might want to use a hack and get an actually unmangled parameter from the actual ("original") HttpServletRequest before it gets mangled.

And that's what you use both methods for: Just adapt the interface vs. get the actual data from the original Http level

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!