Java liferay中的portlet间通信

Java liferay中的portlet间通信,java,liferay,portlet,Java,Liferay,Portlet,我是新来的,雷。所以,我只想解释一下我的情况 实际上,我的网页上有两个portlet—一个在左侧,另一个在右侧: 左侧portlet包含两个超链接,即demo1和demo2 我还有另外两个portlet,比如demo1Portlet和demo2Portlet 与右侧portlet不同,“demo1Portlet”将通过以下方式显示: 默认 现在我要做的是,如果我点击demo2链接,然后,在右边 portlet将更改,它将显示“demo2Portlet”,如果我单击 在demo1链接上,它将在右

我是新来的,雷。所以,我只想解释一下我的情况

实际上,我的网页上有两个portlet—一个在左侧,另一个在右侧:

  • 左侧portlet包含两个超链接,即demo1和demo2
  • 我还有另外两个portlet,比如demo1Portlet和demo2Portlet
  • 与右侧portlet不同,“demo1Portlet”将通过以下方式显示: 默认
  • 现在我要做的是,如果我点击demo2链接,然后,在右边 portlet将更改,它将显示“demo2Portlet”,如果我单击 在demo1链接上,它将在右侧显示“demo1Portlet”
有人知道我怎样才能完成这项任务吗

请尽快回复我

我对LiftTray是新手,所以我不知道通过IPC或不使用IPC可以实现什么。不管怎样,请解释一下


谢谢。

有两种不同的方式让portlet彼此对话。大多数都包含在的文档和中

在您的情况下,您应该真正查看页面:

用你的基本结构

<a href="javascript:void(0)" class="comm-demo">demo[number]</a>

您可以在“发送器portlet”上使用此JS:

//您可能需要使用jQuery而不是$。Liferay可能有自己的
//$jQuery不应该处理的函数。
$(函数(){
$('a.comm-demo')。单击(函数(事件){
var txt=$(this.next().val();//演示
触发器('click',{text:txt});
返回false;
}); 
});
然后在“接收portlet”上:

Liferay.bind(
“点击”,
函数(事件、数据){
var txt=data.text;
//这将设置所有类别的字段具有文本
//“demoPortlet”
$('.class of fields')[0].html(txt+“Portlet”);
//我相信有一种方法可以通过
//模拟鼠标点击,但需要进行研究
//确认。
});

+1关于一个开箱即用的解决方案,它不会像许多解决方案一样粘在钩子/portlet类型的解决方案中。在门户世界中,我建议使用IPC方式,因为它可以巧妙地处理名称空间问题——在接收此类javascript事件的页面上,可以有各种“匹配”html。另外,IPC是处理服务器对此的反应的方法。但是,它通常涉及页面重新加载。另外,请注意,上面的代码使用的是jquery,它已包含在Liferay 5.2中,但在版本6中已被AlloyUI(YUI扩展)替换。而且,对于jQuery的使用,您肯定需要使用兼容模式,例如,在上面的代码显示“$”(如注释所示)的地方使用“jQuery”,请尝试此链接。。很有帮助。。
// you may need to have jQuery instead of $. Liferay may have its own 
// $ function which jQuery shouldn't mess with.
$( function () { 
      $('a.comm-demo').click( function(event) { 
           var txt = $(this).next().val(); // demo<number> 
           Liferay.trigger('click', {text: txt}); 
           return false; 
      }); 
 });
 Liferay.bind( 
      'click', 
      function(event, data) { 
           var txt = data.text;
           // this will set all class-of-fields to have the text 
           // "demo<number from above>Portlet"
           $('.class-of-fields')[0].html(txt + "Portlet"); 
           // I believe there is a way to minimize/maximize a portlet by 
           // simulating a mouse click, but research would be needed to 
           // confirm.
 });