0

我在 Liferay 中的 portlet 间通信有问题。两个 portlet 通过事件进行通信。

发件人:

<supported-publishing-event xmlns:x='http://liferay.com'>
    <qname>x:aufgabeInfo</qname>
</supported-publishing-event>

听众:

<supported-processing-event xmlns:x='http://liferay.com'>
    <qname>x:aufgabeInfo</qname>
</supported-processing-event>

事件:

<event-definition xmlns:x='http://liferay.com'>
    <qname>x:aufgabeInfo</qname>
    <value-type>java.lang.String</value-type>
</event-definition>

发件人Portlet:

<a onclick="selectedEntry('${aufgabe.aufgabenName}', '${aufgabe.aufgabenID}');"> 
  ${aufgabe.aufgabenName} </a><br/>

onclick 事件通过 ajax 调用调用 ProcessAction 方法。

function selectedEntry(name, id){
    console.log("in click");
     var url = '<portlet:actionURL name="open"/>';
       $.ajax({
           type: "POST",
           url: url,
           data: {"name": name, "ID": id},
           dataType: "json",
           success: function(){
               console.log("in success");

           },
       });

并且 ProcessAction 方法设置了一个用于通信的事件。

QName qName = new QName("http://liferay.com", "aufgabeInfo", "x");
actionResponse.setEvent(qName, jsonString);

因此Listener-Portlet 在ProcessEvent 方法中接收到这个事件。

Event event = request.getEvent();
String jsonString = (String) event.getValue();

我的问题是我需要javascript中的jsonString。使用 onclick-Event 它不会刷新整个页面,但可以进行通信。使用按钮刷新整个页面,但通信不起作用。

任何想法?

4

1 回答 1

-1

Portlet 规范的第一个版本 JSR-168/portlet1.0 不包括对 Portlet 间通信的任何支持。第二个版本,JSR-286/portlet2.0,支持 IPC Mechanism。JSR-286 使 IPC 可以轻松地在两个 portlet 之间共享数据。使用 IPC 机制,我们可以将数据从 ACTION 共享到 VIEW 阶段和 VIEW-VIEW 阶段。

有关在 Liferay 中创建 portlet 的分步指南,您可以在此处阅读

于 2013-12-16T07:32:49.627 回答