Declare the events in the portlet.xml file. To do this:
Set the event definition at the portlet application level. This specifies the event name and the object type.
The object must be serializable and annotated with XML root element.
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd /opt/SUNWportal/dtd/portlet.xsd" version="2.0"> <portlet> <portlet-name>listportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.ListPortlet</portlet-class> .......<> </portlet> <portlet> <portlet-name>detailportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.DetailPortlet</portlet-class> .......<> </portlet><> <portlet> <portlet-name>weatherportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.WeatherPortlet</portlet-class> .......<> </portlet><> <portlet> <portlet-name>mapportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.MapPortlet</portlet-class> .......<> </supported-processing-event> </portlet> <event-definition> <qname xmlns:x="http:sun.com/tourevents"> x:Tour </qname> <value-type>com.sun.portal.portlet.touripc.Tour</value-type> </event-definition> </portlet-app> @XmlRootElement public class Tour implements Serializable { public Tour() { } private String name; private String description; private String guide; private String weathercode; private String mapcode; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getGuide() { return guide; } public void setGuide(String guide) { this.guide = guide; } public String getWeathercode() { return weathercode; } public void setWeathercode(String weathercode) { this.weathercode = weathercode; } public String getMapcode() { return mapcode; } public void setMapcode(String mapcode) { this.mapcode = mapcode; } } |
In the portlet section, specify the event name defined above for the portlets that you want to publish in this event.
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd /opt/SUNWportal/dtd/portlet.xsd" version="2.0"> <portlet> <portlet-name>listportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.ListPortlet</portlet-class> ... <supported-publishing-event> <qname xmlns:x="http:sun.com/tourevents"> x:Tour </qname> </supported-publishing-event> </portlet> ... </portlet-app> |
In the portlet section, specify the event name defined above for the portlets that want to process in this event.
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd /opt/SUNWportal/dtd/portlet.xsd" version="2.0"> <portlet> ... <portlet-name>detailportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.DetailPortlet</portlet-class> ..... <supported-processing-event> <qname xmlns:x="http:sun.com/tourevents"> x:Tour </qname> </supported-processing-event> </portlet> <portlet> <portlet-name>weatherportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.WeatherPortlet</portlet-class> ..... <supported-processing-event> <qname xmlns:x="http:sun.com/tourevents"> x:Tour </qname> </supported-processing-event> </portlet> <portlet> <portlet-name>mapportlet</portlet-name> <portlet-class>com.sun.portal.portlet.touripc.MapPortlet</portlet-class> ..... <supported-processing-event> <qname xmlns:x="http:sun.com/tourevents"> x:Tour </qname> </supported-processing-event> </portlet> ...... </portlet-app> |
Issue an event in the portlet that was specified as a supported-publishing-event event in the portlet.
public void processAction(ActionRequest request, ActionResponse response) throws PortletException, java.io.IOException { Tour selectedTour = new Tour(); String name = request.getParameter("name"); String desc = request.getParameter("desc"); String guide = request.getParameter("guide"); String wc = request.getParameter("wc"); String mc = request.getParameter("mc"); selectedTour.setName(name); selectedTour.setDescription(desc); selectedTour.setGuide(guide); selectedTour.setWeathercode(wc); selectedTour.setMapcode(mc); QName qname = new QName("http:sun.com/tourevents", "Tour"); response.setEvent(qname, selectedTour); ......... } } |
Process the event in the portlet that has been specified as a supported-processing-event event in the portlet.
public class MapPortlet extends GenericPortlet { ......... public void processEvent(EventRequest request, EventResponse response) { Event event = request.getEvent(); logger.severe("MapPortlet got event"); if(event.getName().equals("Tour")){ Tour payload = (Tour)event.getValue(); response.setRenderParameter("TourName", payload.getName()); response.setRenderParameter("TourMap", payload.getMapcode()); } } ......... } public class DetailPortlet extends GenericPortlet{ ......... public void processEvent(EventRequest request, EventResponse response) { Event event = request.getEvent(); if(event.getName().equals("Tour")){ Tour payload = (Tour)event.getValue(); response.setRenderParameter("TourName", payload.getName()); response.setRenderParameter("TourGuide", payload.getGuide()); response.setRenderParameter("TourDesc", payload.getDescription()); } } ......... } public class WeatherPortlet extends GenericPortlet { ......... public void processEvent(EventRequest request, EventResponse response) { Event event = request.getEvent(); if(event.getName().equals("Tour")){ Tour payload = (Tour)event.getValue(); response.setRenderParameter("TourName", payload.getName()); response.setRenderParameter("TourCode", payload.getWeathercode()); } } ......... } |