3

我在 Liferay 6 中使用像 feed.jspf 这样的开箱即用 portlet 的 jsp:

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

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

4

6 回答 6

10

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

HttpServletRequest request = PortalUtil.getHttpServletRequest(portletRequest);
String articleId = request.getParameter("articleId");
于 2011-02-08T14:01:23.010 回答
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");

%>

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

于 2012-08-03T12:45:40.967 回答
2

使用 portlet 时,每个 HttpServletRequest 参数都有一个前缀,它通知参数的“类型”,一个后缀表示应该处理它的 portlet 的哪个实例。因此,参数的名称不仅仅是“articleId”。我不知道您在使用什么 portlet,但如果它是一个名为 portlet,比如说,通过战争部署的“示例”,则将调用参数example_WAR_exampleportletwar_articleId_w2Xd

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

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

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

HTH。让我们知道它是否有效!

于 2011-02-07T14:02:43.413 回答
2

它对我有用:

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

HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request);

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

....
....
....
}
于 2012-07-23T17:35:46.977 回答
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() );
    }
}

然后在你的facelet中:

#{originalRequest.getParam('my_param')}
于 2014-11-20T19:17:10.810 回答
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;

}
于 2011-03-10T23:32:29.393 回答