在Liferay中,一个portlet可以在新的AUI对话框中打开一个单独的portlet吗?

时间:2012-01-17 21:12:09

标签: liferay portlet alloy-ui

我一直在Liferay网站上,并没有找到有效的答案。我想要做的是在我的自定义portlet中有一个JavaScript函数,它将打开一个AUI对话框,该对话框显示来自完全独立的portlet的view.jsp内容。

这是我到目前为止所得到的:

AUI().ready('aui-dialog','aui-dialog-iframe','liferay-portlet-url', function(A) {
        var url = Liferay.PortletURL.createResourceURL();
        url.setPortletId("my_portlet_that_I_want_in_a_dialog");
        url.setWindowState('pop_up'); 

    #foreach ($parameter IN $parameters.getSiblings())
        url.setParameter("${parameter.data}", "${parameter.value.data}");
    #end  


    window.myDialog = new A.Dialog(
        {
            title: 'My Dialog',
            width: 640,
            centered: true
        }
    ).plug(
        A.Plugin.DialogIframe,
        {
            uri: url.toString(),
            iframeCssClass: 'dialog-iframe'
        }
    )
});

然后,在一个完全不同的portlet中,我有一个调用的JavaScript函数:

window.myDialog.render()

这很有用。但是,当对话框出现时,它始终为空白或无限显示“正在加载”动画。

可能相关:在Firebug控制台中,我看到了

  

“yui:NOT loaded:delayed-task”

不确定这是否与当前问题有关。谢谢您的帮助。

编辑:如果我将网址变量记录到控制台,然后将网址复制并粘贴到新标签页中,则响应完全为空白。这让我相信我要么没有正确生成URL,要么就会出现某种类型的portlet间权限问题。

1 个答案:

答案 0 :(得分:1)

经过3天的撞击墙试图解决这个问题,并通过Liferay的糟糕文档挖掘,解决方案非常简单。

而不是

url.setWindowState('pop_up'); 

需要:

url.setWindowState('exclusive');

一旦我这样做,它就完美无缺。