Javascript 基于事件的IPC(使用事件的portlet间通信)
我是新来的,雷。我在不同liferay插件项目中的两个Portlet之间的通信方面有问题。为了理解这一点,我使用了我在网上找到的示例代码。当我按下按钮时,出现以下错误:Javascript 基于事件的IPC(使用事件的portlet间通信),javascript,java,liferay,Javascript,Java,Liferay,我是新来的,雷。我在不同liferay插件项目中的两个Portlet之间的通信方面有问题。为了理解这一点,我使用了我在网上找到的示例代码。当我按下按钮时,出现以下错误: java.lang.NoSuchMethodException: com.liferay.util.bridges.mvc.MVCPortlet.processFood(javax.portlet.ActionRequest, javax.portlet.ActionResponse) at java.lang.Class.ge
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(发件人)
Receiver.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);
}
}
谢谢我认为您的问题在于您在接收方portlet中的portlet.xml文件中放入了标签
,但您必须使用标签
您可以在此url中查看更多详细信息:
希望这有帮助。注意。您是否在portlet.xml中声明了事件定义?是的,在发送方(portlet.xml)和接收方(portlet.xml)中。在
声明之外的每个portlet.xml
文件中都应该有一个关于此事件的声明。您也包括了吗?是的,在Receiver portlet中有标记。因此,您必须使用标记来更改它
<%@ 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>
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);
}
}
}
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);
}
}