【问题标题】:How to get parameters from URL in Liferay portlet?如何从 Liferay portlet 中的 URL 获取参数?
【发布时间】:2011-02-05 10:22:54
【问题描述】:

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

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

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

【问题讨论】:

  • 使用 RenderRequest 请求 = (RenderRequest) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("javax.portlet.request");获取 RenderRequest

标签: java portlet liferay jsr168


【解决方案1】:

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

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

【讨论】:

【解决方案2】:

在我的 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 的回答

【讨论】:

  • 是否有可能使用JSTL或EL获得它?
【解决方案3】:

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

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

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

如果没有定义这个对象,你只需要在某处插入&lt;portlet:defineObjects/&gt;标签,然后这个对象就可以使用了。

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

【讨论】:

  • 是的,但我想从 url 获取 articleId ...就像 localhost:8080/author-detail?articleId=12345...can 我在 portlet ..jsp 页面中得到它???
  • 那么,URL参数是没有前缀或后缀的吧?我不知道如何获得它(我建议你无论如何都尝试过,希望它有效)但我想知道这个参数是如何设置的。它是如何定义的?是否在您制作的某个 portlet/hook 中?
  • 从我在liferay 中的一个自定义portlet ...我通过定义页面名称并手动传递参数来调用其他页面...之后它将重定向到作者详细信息页面..在那我 hv 一个 portlet ..i hv 来访问 articleId ??....
【解决方案4】:

它对我有用:

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

HttpServletRequest requestInsideThePortlet = PortalUtil.getHttpServletRequest(request);

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

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

【讨论】:

    【解决方案5】:

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

    【讨论】:

      【解决方案6】:

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

      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-11-21
        • 1970-01-01
        • 2016-05-09
        • 2017-08-19
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-09
        相关资源
        最近更新 更多