如何从Liferay portlet中的URL获取参数?

时间:2011-02-05 10:22:54

标签: java portlet liferay jsr168

我在Liferay 6中使用jsp的开箱即用portlet,如feed.jspf:

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

无论是在自定义portlet还是在.jsp文件中,它都会给出一个空值,但它应该有一个值。

6 个答案:

答案 0 :(得分:10)

当然,您始终可以使用标准HttpServletRequest从中检索参数。您可以使用PortalUtil类获取此请求,如下例所示:

HttpServletRequest request = PortalUtil.getHttpServletRequest(portletRequest);
String articleId = request.getParameter("articleId");

答案 1 :(得分:8)

在我的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");

%>

(这结合了其他答案的智慧片段,特别是MiguelGilMartínez的答案,2012年7月23日17:35

答案 2 :(得分:2)

使用portlet时,每个HttpServletRequest参数都有一个前缀,用于通知参数的“类型”以及表示portlet的实例应该处理它的后缀。因此,参数的名称不仅仅是“articleId”。我不知道你在使用什么portlet,但是如果它是一个被调用的portlet,让我们说,通过war部署“example”,参数将被称为example_WAR_exampleportletwar_articleId_w2Xd

但是,您不必处理这种复杂性。如果您正在一些已经创建的portlet的JSP中工作,那么应该有一个名为renderRequest的对象,其中包含所有参数并抽象所有这些名称。因此,不是检索原始的servlet请求,而是使用它:

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

如果未定义此对象,则只需在某处插入<portlet:defineObjects/>标记,然后该对象即可使用。

HTH。如果有效,请告诉我们!

答案 3 :(得分:2)

它对我有用:

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

HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request);

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

....
....
....
}

答案 4 :(得分:1)

对于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')}

答案 5 :(得分:0)

我尝试了你的解决方案,但渲染请求它给了我一个例外, 所以这是另一种解决方案:

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;

}