我在 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 它不会刷新整个页面,但可以进行通信。使用按钮刷新整个页面,但通信不起作用。
任何想法?