有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Portlet间通信页面提交

我正在使用JavaLiferay门户,其中有多个portlet。我想用一个表单创建一个portlet,当它被提交时,数据被检索,具体结果显示在其他一些页面portlet中。但不幸的是,这些事情并没有妨碍我们

我正考虑使用会话,但出现了两个问题

  1. javascript value assignment to java variable.
  2. if the values are passed to the page on which the specific portlet is placed, that portlet doesn't get the values.

然后,我听到了Portlet间通信(IPC)的概念,并从“liferay in action”获得了一些帮助,但如果两个Portlet都放在同一页面上,那么代码就会工作,我的要求是一个Portlet放在第一页上,当表单提交时,它会重定向到第二页,到第二个portlet获取参数。我尝试了更多的例子,但它没有在我的方式工作


共 (3) 个答案

  1. # 1 楼答案

    我找到了另一种方法,一种相对简单的方法,只是在liferay上尝试了那个维基

  2. # 2 楼答案

    据我所知,IPC确实只在同一页面上的Portlet之间工作。此外,portlet规范没有提供切换页面的通用机制,因此您只能使用特定于门户供应商的方法来实现这一点。但是,使用公共呈现参数和到另一个页面的正确构造的Liferay URL,您应该能够实现您想要的结果:http://www.liferay.com/web/guest/community/forums/-/message_boards/message/1207858

  3. # 3 楼答案

    据我所知,您有一些JavaScript参数要传递到下一页。不过,您可以使用PortletSession的APPLICATION_作用域来实现这一点,您可以通过将值放入输入中来解决将JS参数转换为Java的问题。如果这些输入变量不应该由用户编写,而您从其他地方获取它们,则可以隐藏输入:

    在jsp中:

    <form>
     <input type="hidden" id="myinput1" name="in1" value="">
     <input type="hidden" id="myinput1" name="in2" value="">
    </form>
    
    <script>
    var a = "avalue";
    var b = "bvalue";
    document.getElementById("myinput1").value=a;
    document.getElementById("myinput2").value=b;
    </script>
    

    然后在需要时提交表格。接下来,您可以在portlet的ProcessAction方法中执行以下操作:

    String a= request.getParameter("in1");
    String b= request.getParameter("in2");
    
    PortletSession session = request.getPortletSession();
    session.setAttribute("a", a , PortletSession.APPLICATION_SCOPE);
    session.setAttribute("b", b , PortletSession.APPLICATION_SCOPE);
    

    在另一个portlet中,可以通过调用

    session.getAttribute("a",PortletSession.APPLICATION_SCOPE);
    

    当然,如果你不能简单地把它们放在下一个页面的url中,你就可以这样做