Inter Portlet Communication页面提交

时间:2012-09-27 20:30:30

标签: java portlet liferay-6

我正在使用java liferay门户,其中有多个portlet。我想创建一个portlet,其形式在提交时检索数据,并在特定的其他页面portlet中显示特定结果。但不幸的是,这些事情并没有妨碍。

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

  
      
  1. javascript值赋值给java变量。
  2.   
  3. 如果将值传递给放置特定portlet的页面,则该portlet不会获取值。
  4.   

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

3 个答案:

答案 0 :(得分:1)

我找到了另一种方法,一种相对简单的方法,只是尝试了来自liferay

的wiki

答案 1 :(得分:1)

据我所知,您有一些JavaScript参数要传递到下一页。但是,您可以使用PortletSession的APPLICATION_SCOPE来执行此操作,并且可以通过将值放在输入中来解决将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);

当然,如果你不能简单地将它们放在下一页的网址中。

答案 2 :(得分:0)

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