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());
}
}
.........
}
|