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