基于事件的IPC(使用事件的portlet间通信)
Event Based IPC(Inter portlet communication using Event)
我是Liferay的新手。我在不同的liferay插件项目中的两个Portlet之间的通信有问题。为了理解,我使用了一个我在网上找到的示例代码。当我按下按钮时,出现此错误:
java.lang.NoSuchMethodException: com.liferay.util.bridges.mvc.MVCPortlet.processFood(javax.portlet.ActionRequest, javax.portlet.ActionResponse) at java.lang.Class.getMethod(Unknown Source).
这是代码:
view.jsp(发件人)
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />
<portlet:actionURL name="processFood" var="actionUrl"></portlet:actionURL>
<form action="<%=actionUrl %>" method="POST">
<h3><input type="radio" name="foodType" value="veg">Vegetarian<br><br></h3>
<h3><input type="radio" name="foodType" value="non-veg">Non - Vegetarian<br><br></h3>
<input type="submit" name="Submit" value="Submit">
</form>
view.jsp(接收器)
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<portlet:defineObjects />
<c:set var="food" value="${foodType}"/>
<c:choose>
<c:when test="${food == 'veg'}">
<h3><font color="green"> You are Vegetarian. You Can Enjoy Dosa</font></h3>
</c:when>
<c:when test="${food == 'non-veg'}">
<h3> <font color="red">You are Non - Vegetarian. You can enjoy Chicken.</font></h3>
</c:when>
<c:otherwise>
<h3>Please Select Food Type</h3>
</c:otherwise>
</c:choose>
Sender.java
import java.io.IOException;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletException;
import javax.portlet.ProcessAction;
import javax.xml.namespace.QName;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class Sender extends MVCPortlet {
@ProcessAction(name="processFood")
public void processFood(ActionRequest request, ActionResponse response) throws PortletException, IOException {
String foodType = ParamUtil.getString(request, "foodType" ,"default");
if(!foodType.equalsIgnoreCase("default"))
{
//We fetch Qname from portlet.xml and set value in it
QName foodEvent = new QName("http://aditya/events", "foodType");
response.setEvent(foodEvent, foodType);
}
}
}
接收器.java
import javax.portlet.Event;
import javax.portlet.EventRequest;
import javax.portlet.EventResponse;
import javax.portlet.ProcessEvent;
import com.liferay.util.bridges.mvc.MVCPortlet;
public class Receiver extends MVCPortlet {
@ProcessEvent(qname = "{http://aditya/events}foodType")
public void receiveFoodType(EventRequest request, EventResponse response) {
Event event = request.getEvent();
String foodType = (String) event.getValue();
request.setAttribute("foodType", foodType);
}
}
感谢
我认为您的问题是在Receiverportlet的portlet.xml文件中放入了标记<supported-publishing-event>
,但必须使用标记<supported-processing-event>
。
您可以在此url中查看更多详细信息:https://www.liferay.com/es/community/wiki/-/wiki/Main/Portlet+to+Portlet+通信
希望这能有所帮助。当做
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- 基于事件的IPC(使用事件的portlet间通信)