2011-07-28 77 views
0

我是liferay中的新成员。所以,我只想解释我的情况。Liferay中的Portlet间通信

其实我有我的网页上的两个门户 - 一个在左侧,另一种是在右侧:

  • 他左侧的portlet包含了两个超说demo1的& DEMO2。
  • 另外我还有两个portlet,demo1Portlet & demo2Portlet。
  • 默认情况下,将显示右侧portlet“demo1Portlet”,而不显示 。
  • 现在我要做的是,如果我点击demo2链接,然后右侧 portlet将会改变,它将显示“demo2Portlet”,如果我在demo1链接上点击 ,那么它将在右侧显示“demo1Portlet” 。

任何人都知道我可以如何实现这个任务吗?

请尽快回复我。

我是新来的人,所以我不知道这是通过IPC还是没有它。请解释一切将如何。

谢谢。

回答

2

有几种不同的方式让portlet彼此交谈。大部分都在IPCdescendantpages的文件中。

在你的情况,你应该看看client-side页:

有了您的基本结构

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

您将有这个JS的 “发射器门户”:

// 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; 
     }); 
}); 
然后在“接收门户组件”上:
+0

+1关于一个不是在hook/portlet类型的解决方案中使用的盒外解决方案,像许多解决方案似乎都在这类编码上。 – mico

+0

在门户网站世界中,我推荐使用IPC方式,因为这样可以很好地处理命名空间问题 - 您可以在接收此类javascript事件的页面上拥有各种“匹配”html。另外,IPC是处理服务器端对此的反应的方式。但是,它通常涉及页面重新加载。 另外,请注意,上面的代码使用jquery,它已包含在Liferay 5.2中,但在版本6中已被AlloyUI(YUI扩展)所取代。而且,对于jQuery的使用,您肯定需要使用兼容性模式,例如使用“jQuery”代码上面说“$”(如评论) –

+0

是啊...重新加载成为难度... – cwallenpoole