代码之家  ›  专栏  ›  技术社区  ›  TechPro

无法从URL获取参数值

  •  1
  • TechPro  · 技术社区  · 8 年前

    我有一个在Liferay平台中开发的portlet,其中添加了从URL获取查询参数值的逻辑。我有一个网站: http://localhost:8080/web/guest/example ,现在正在从另一个不在Liferay中的外部站点调用此站点,查询参数位于末尾: http://localhost:8080/web/guest/example?value=test 。在Liferay Portlet代码中,我应用了逻辑,以从不工作的URL中获取参数值。它返回“null”值:

    HttpServletRequest httpReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(request)); 
            String myValue = httpReq.getParameter("value");     
            System.out.println(myValue);
    

    我也尝试了这种方法,但从Query参数中得到了相同的“null”值:

    HttpServletRequest httpRequest = PortalUtil.getHttpServletRequest(request);
            String myValue = httpRequest.getParameter("value");
            System.out.println(myValue);
    

    有没有建议我在这里做错了什么,或者如何从外部站点获取查询参数值?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Thorsten Laux    8 年前

    我只是在里面试了一下 doView() 这对我很有用:

    HttpServletRequest httpReq = PortalUtil.getHttpServletRequest(renderRequest);
    HttpServletRequest httpOrigReq = PortalUtil.getOriginalServletRequest(httpReq);
    String myValue = httpOrigReq.getParameter("value");
    

    唯一的区别(可能是)是我使用了RenderRequest对象。(因为我看不出你的类型 request -对象。)

        2
  •  1
  •   Olaf Kock    8 年前

    如果你碰巧设置了

        <render-weight>0</render-weight>
        <ajaxable>true</ajaxable>
    

    在里面 liferay-portlet.xml ,portlet将通过Ajax呈现,不再在同一HTTP请求中。我试过了:没有这些设置,你的代码(第一种选择)运行得很好(在 doView 方法)。

    然而,无论如何,依赖对随机请求参数的访问(在门户中)是不好的做法……您应该构建一个完整的门户URL或使用Liferay的友好URL功能。这样,您就真正进入了门户世界,而不是随机的servlet/portlet组合。