2017-10-16 108 views
0

我需要创建一个Servlet,它将管理一些信息,然后将转到Liferay 6.2 Portlet。两者都在同一台服务器上。使用会话发送参数到Liferay Portlet

我需要Servlet发送参数,但我不想发送它GET,但POST方法。所以,我尝试将它放入会话中以从Portlet中检索它。

在Servlet中,我有:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    try { 
     request.getSession().setAttribute("param1", "TEST 1"); 
     url = "http://myServer/"; 
     response.sendRedirect(response.encodeRedirectURL(url)); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

,并在Portlet的我管理在渲染方法的信息,因为我想获得的param1我渲染页面之前:

public void render (RenderRequest renderRequest, RenderResponse renderResponse) 
     throws PortletException, IOException { 
    super.render(renderRequest, renderResponse); 
    //Try to retrieve from getOriginalServletRequest 
    HttpServletRequest servletReq = PortalUtil.getOriginalServletRequest(PortalUtil.getHttpServletRequest(renderRequest)); 
    String param1 = servletReq.getSession().getAttribute("param1").toString(); 
    //Try to retrieve from getHttpServletRequest 
    HttpServletRequest servletReq_ = PortalUtil.getHttpServletRequest(renderRequest); 
    String param1_ = servletReq_.getSession().getAttribute("param1").toString(); 
} 

由于你可以看到,我试图从getHttpServletRequest和getOriginalServletRequest中检索,但是我总是得到param1 null。

有什么建议吗? 提前谢谢!

更新问题:

我正在从第三方调用,我收到一个GET参数我想评估。

之后,我不想在中间渲染一个页面,我想重定向到一个或另一个Portlet,具体取决于该评估。

我需要发送一些个人信息给这些Portlet,所以我想用POST方法发送一些参数。

Servlet不适合不与Portlet共享会话。我试图实现一个登陆Portlet,但重定向只能在操作阶段完成,所以我需要在重定向之前渲染一个(空)页面,不喜欢那个部分。渲染阶段不允许重定向(即使获取PortalUtil.getHttpServletResponse(),不起作用)

任何建议?谢谢!

+0

编辑不会在没有阅读我的答案下的所有评论的情况下使情况更加清晰(即使那时我比混淆更清楚)。我建议您根据完整的业务需求和迄今为止所做的工作来开始另一个问题。就我而言,我正在考虑回答的最初问题,而更新是一个单独的问题。但是请不要只复制/粘贴部分,而是要连同代码一起描述您的需求。 –

回答

2

servlet和portlet不会共享相同的会话。该门户组件位于门户服务器内,例如Liferay的。该servlet通常位于其自己的Web应用程序中,因此完全按设计分开。

如果您需要在两者之间进行沟通,这里有两个可能的解决方案/解决方法:

  • 重新实现你的servlet作为portlet,可能利用门户
  • 的资源相使用请求参数而不是一个会话属性后,所有的评论

编辑:

看来最好退后一步,看看在根本问题 - 什么是你实际上试图解决的问题?你的问题的内容是你试图解决它如何,显然有挑战。看起来问题首先需要一个不同的解决方案。

我的回答说明为什么你解决方案不能正常工作,但这显然不利于解决根本问题

+0

谢谢。 我怀疑这个会话不会被共享,但“getHttpServletRequest”方法给了我一些希望:) 我想到了servlet是一个portlet,我只是推迟了这个测试,因为它很难在本地主机上实现,因为我是使用单个portlet,而不是整个门户网站,所以我不能创建不同的页面来导航到另一个... – Marta

+0

我试图使用request.setAttribute(“param1”,“测试1”),但我都没有得到它。如何轻松设置请求参数?请求对象不允许setParameter()调用,并且我刚刚阅读了有关构建包装器的信息... – Marta

+0

我也尝试过使用response.addCookie(),但它没有到达Portlet:( – Marta