Friday, 31 May 2013

Applying Listeners to JSR Compliant Portlets

As per the JSR 286 Specification the following Listeners, which work with Servlet Requests, can be applied to requests targeted towards Portlets.
  • ServletContextListener 
  • ServletContextAttributeListener
  • HttpSessionActivationListener
  • HttpSessionAttributeListener
  • HttpSessionBindingListener
  • ServletRequestListener.

For this to work the Container needs to set a variable javax.portlet.lifecycle_phase.

Lets see an example.



In this example we will create a new custom HttpSessionAttributeListener. This listener will be triggered every time an attribute is added or removed from the PortletSession object.

Step 1: Create a JSR compliant Portlet, using our earlier blog post. If you have one already then make the following changes.

Create a new Class file CustomSessionAttributeListener, or just copy the code below. This file needs to implement HttpSessionAttributeListener interface.



public class CustomSessionAttributeListener implements
HttpSessionAttributeListener{

public void attributeAdded(HttpSessionBindingEvent event) {
 System.out.println("Following attribute was added"+event.getName());
}

public void attributeRemoved(HttpSessionBindingEvent event) {
 System.out.println("Following attribute was removed"+event.getName());
}

public void attributeReplaced(HttpSessionBindingEvent event) {
}
}

Step 2: Add the following xml fragment to your web.xml file



<listener>
<listener-class>
   com.listeners.CustomSessionAttributeListener
</listener-class>
</listener>


Step 3: In the Portlet class just add an attribute to the session object. Refer to the code below.



public class RegisterUserPortlet extends GenericPortlet{

@RenderMode(name="VIEW")
public void display(RenderRequest req, RenderResponse res) throws PortletException, IOException{
/*Session Demo*/
PortletSession session = req.getPortletSession();
session.setAttribute("profilename", "ankur");
session.removeAttribute("profilename");
}
}


And that is it. Just deploy your code. When you will access this Portlet you will see following messages in the console / log file.

Following attribute was added profilename
Following attribute was removed profilename

No comments:

Post a Comment