1

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

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

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

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

4

3 回答 3

1

我找到了另一种方法,一种相对简单的方法,刚刚尝试了liferay的那个 wiki

于 2012-09-28T12:50:49.227 回答
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);

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

于 2012-11-14T15:29:53.113 回答
0

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

于 2012-09-28T09:13:43.530 回答