В чем разница между PortalUtil.getOriginalServletRequest и PortalUtil.getHttpServletRequest? - PullRequest
4 голосов
/ 20 января 2012

Я хочу знать разницу между

PortalUtil.getOriginalServletRequest(portletRequest) 

и

PortalUtil.getHttpServletRequest(portletRequest).

Ответы [ 2 ]

5 голосов
/ 27 января 2012

Несмотря на то, что на вопрос уже есть принятый ответ, я считаю, что есть над чем подумать: иногда вы хотите передавать запросы через интерфейс HttpServletRequest - потому что некоторый интерфейс требует этого.Это оставит все искажения имен в PortletRequest на месте (например, вы можете вызвать getParameter («имя»), не удаляя его самостоятельно).

С другой стороны, иногда вам может понадобиться взломать и получить фактически нерасширенный параметр из фактического («оригинального») HttpServletRequest до того, как он искажается.

И это то, что вы используетеОба метода для: Просто адаптировать интерфейс против получения фактических данных с исходного уровня HTTP

4 голосов
/ 21 января 2012

Глядя на исходный код 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;
}

Итак, как говорится в комментарии: «Получите оригинальный запрос, чтобы портлеты внутри портлетов правильно отображались». Вероятно, это потребуется только для ситуации с вложенными портлетами или аналогичной. Большую часть времени вам просто нужно использовать:

PortalUtil.getHttpServletRequest(portletRequest);

Надеюсь, это поможет!

...