Portlet间通信页面提交



我使用的是java救生门户,其中有多个Portlet。我想创建一个具有表单的portlet,在提交表单时,将检索数据,并在其他页面portlet中显示特定结果。但不幸的是,这些事情并没有成为阻碍。

我想使用会话,但出现了两个问题。

  1. 为java变量分配javascript值
  2. 如果将值传递给放置特定portlet的页面,则该portlet不会获得值

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

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

据我所知,您有一些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);

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

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

最新更新