Fórum

2つのポートレットを使って、Popup表示させたポートレットから、裏画面のポートレットを更新させる方法

LiferayではIPC(Inter Portlet Communication)という方法でポートレット間の通信を行うことが可能です。

そのIPCを使って、更にポートレットAからポートレットBをポップアップで表示させ、裏画面のポートレットAを変更するサンプルです。(Liferay 6.2)

IPC-ReciverとIPC-Senderをデプロイし、画面上にはIPC-Reciverだけを配置します。「Popup using Liferay open-window」というリンクがあるので、それをクリックすると、IPC-Senderポートレットが起動します。IPC-Senderの「Beam me!」というリンクをクリックすると、裏のIPC-Reciverのメッセージがランダムに変更されます。

liferay-portlet.xmlに
<add-default-resource>true</add-default-resource>

を指定することで、そのポートレットを画面に配置することなく、別ポートレットから呼び出すことができるようになります。また、

以下の方法でポップアップで表示することができます。IPCsender_WAR_IPCsenderportletはポートレットの名前になります。

<liferay-portlet:renderurl portletname="IPCsender_WAR_IPCsenderportlet" var="testPopupURL" windowstate="<%=LiferayWindowState.POP_UP.toString()%>">
</liferay-portlet:renderurl>

<aui:script>
function <portlet:namespace />showPopup(url) {

    var url = url;

    Liferay.Util.openWindow(
            {
                dialog: {
                    cache: false,
                    width:800,
                    modal: true
                },
                id: 'testPopupIdUnique',                
                uri: url
            }
        );
    }
 </aui:script>

<a href="javascript: <portlet:namespace />showPopup('<%=testPopupURL%>')">
    Popup using Liferay open-window
</a>

IPC-sender側のview.jspで、
parent.Liferay.Portlet.refresh('#p_p_id_IPCreciver_WAR_IPCreciverportlet_');


とIPC-reciver(裏画面)のリフレッシュをコールして、再描画させています。