java - 使用 session 将参数发送到 Liferay Portlet

标签 java session servlets liferay

我需要制作一个 Servlet 来管理一些信息,然后,将转到 Liferay 6.2 Portlet。两者都在同一服务器中。

我需要Servlet发送参数,但我不想发送GET,而是发送POST方法。因此,我尝试将其放入 session 中以从 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 共享 session 。

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

有什么建议吗?谢谢!

最佳答案

servlet 和 portlet 不会共享同一个 session 。 Portlet 位于门户服务器内,例如莱弗雷。 Servlet 通常位于其自己的 Web 应用程序中,因此在设计上完全分离。

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

  • 将 servlet 重新实现为 portlet,可能会利用 portlet 的资源阶段
  • 使用请求参数而不是 session 属性

在所有评论后编辑:

似乎最好退一步看看根本问题 - 您真正想要解决的问题是什么?您问题的内容是您如何尝试解决它,显然存在挑战。看起来这个问题首先需要一个不同的解决方案。

我的回答描述了为什么您的解决方案不起作用,但这显然无助于解决根本问题

关于java - 使用 session 将参数发送到 Liferay Portlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46769846/

相关文章:

java - 使用异步任务将大字符串从 Android 发送到 Servlet

java - 从eclipse中运行时如何告诉tomcat使用外部库

java - GWT 日志记录仅显示级别 SERVE

javascript - 调用客户端重定向后 session 属性丢失

php - 什么会导致网站不总是加载

java - 在签名中没有 RedirectAttributes 的情况下访问方法中的 RedirectAttributes

Java-Android SDK-savedInstanceState 和 onSaveInstanceState

java - 如何在游戏中将操作分配给复选框!对于java

java - 如何对程序的某些部分进行排队

php - Ajax post 请求仅在浏览器关闭并再次打开后才能通过