Как получить параметры из URL в портлете Liferay? - PullRequest
3 голосов
/ 05 февраля 2011

Я использую jsp из стандартного портлета, например feed.jspf в Liferay 6:

String articleId =null;
HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest));
articleId = httpReq.getParameter("articleId");

Он дает нулевое значение в пользовательском портлете или в файлах .jsp, но он должен иметь значение.

Ответы [ 6 ]

10 голосов
/ 08 февраля 2011

Конечно, вы всегда можете использовать стандартный запрос HttpServletRequest для получения ваших параметров.Вы можете получить этот запрос, используя класс PortalUtil, как в следующем примере:

HttpServletRequest request = PortalUtil.getHttpServletRequest(portletRequest);
String articleId = request.getParameter("articleId");
8 голосов
/ 03 августа 2012

В моем Liferay- JSP я использую это:

<!-- ... some imports... -->
<!-- ... some more imports... -->
<%@ page import="com.liferay.portal.util.PortalUtil" %>

<portlet:defineObjects /> <!-- Liferay-specific, defines renderRequest etc.-->

<%
    HttpServletRequest r = PortalUtil.getHttpServletRequest(renderRequest);
    String wellHole =  PortalUtil.getOriginalServletRequest(r).getParameter("well_hole");

%>

(здесь сочетаются фрагменты мудрости из других ответов, в частности, ответа Мигеля Гила Мартинеса от 2012 года 23 июля в 17:35)

2 голосов
/ 23 июля 2012

у меня сработало:

public void doView(RenderRequest request, RenderResponse response) throws 
  PortletException, IOException {

HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request);

String myURLParam =
 PortalUtil.getOriginalServletRequest(requestInsideThePortlet).getParameter("myURLParam");

....
....
....
}
2 голосов
/ 07 февраля 2011

При работе с портлетами каждый параметр HttpServletRequest имеет префикс, который сообщает «тип» параметра и суффикс, указывающий, какой экземпляр портлета должен его обработать.Таким образом, имя параметра не просто "articleId".Я не знаю, с каким портлетом вы работаете, но если бы это был портлет с именем, скажем, "example", развернутый в ходе войны, этот параметр был бы назван example_WAR_exampleportletwar_articleId_w2Xd.

Однако вам не приходится сталкиваться с такой сложностью.Если вы работаете в JSP какого-то уже созданного портлета, должен существовать объект с именем renderRequest, который содержит все параметры и абстрагирует все это искажение имени.Таким образом, вместо получения исходного запроса сервлета вы используете его:

String articleId = renderRequest.getParamenter("articleId");

Если этот объект не определен, вам просто нужно вставить тег <portlet:defineObjects/> где-нибудь, и после этого объект будет доступен.

HTH.Дайте нам знать, если это сработало!

1 голос
/ 20 ноября 2014

Для JSF я использую это:

@ManagedBean
@RequestScoped
public class OriginalRequest {
    private HttpServletRequest getOriginalRequest() {
        return PortalUtil.getOriginalServletRequest(
                PortalUtil.getHttpServletRequest(
                        (PortletRequest) FacesContext.getCurrentInstance()
                                .getExternalContext().getRequest() ) );
    }

    public String getParam( String name ) {
        return getOriginalRequest().getParameter( name );
    }

    public List<String> getParamNames() {
        return Collections.list( getOriginalRequest().getParameterNames() );
    }
}

Тогда в вашем фейсбуке:

#{originalRequest.getParam('my_param')}
0 голосов
/ 11 марта 2011

Я попробовал ваши решения, но запрос на выдачу дает мне исключение, так что это другое решение:

public String obtainFromUrl(String keyFromWeb) {

    Object outcome = null;
    Map<String, Object> map = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
    if (map != null) {
        for (String key : map.keySet()) {
            if (map.get(key) instanceof HttpServletRequestWrapper) {
                HttpServletRequest request = (HttpServletRequest) ((HttpServletRequestWrapper) map.get(key))
                        .getRequest();
                outcome = request.getParameter(keyFromWeb);
                break;
            }
        }
    }
    return (String) outcome;

}
...