Portlets are the fragments of a web application. A Portlet contains the following lifecycle stages: init, render, processAction, processEvent, serveResource, destroy. These are based on JSR-168/JSR-286 Portlet specification standards.

Before continuing, take a look at creating Liferay portlet using Liferay Developer Studio.

A portlet can have different modes like VIEW, EDIT, HELP.

  • VIEW: View mode is to render the content to the users.
  • EDIT: Edit mode helps the user to edit and add configurations to customize the behavior of the portlet.
  • HELP: Help mode should provide helpful information about the portlet.

The Following are the methods javax.portlet.Portlet class contains to support above mentioned portlet modes:

  • init():  This method is called when a portlet is created.
  • doView():  This is used to render the page for portlet in VIEW mode.
  • doEdit()/ doHelp(): These are invoked when portlets are in EDIT/HELP mode.
  • processAction(): To handle actions.
  • serveResource(): It is used to serve resources without refreshing the page.
  • processEvent(): It is used to handle portlet events.
  • public void destroy(): It is called when the portlet is removed from a page.

A portlet that is extending Generic portlet must override doView() method. Below is the simple Generic Liferay portlet example with VIEW mode.

By default Liferay portlet supports the VIEW method.

  • Create a Liferay project. Create a new action class and extend GenericPortlet.
  • Change the parameter value of <portlet-class> tag in the portlet.xml file to the newly created action class.
  • implement doView() method. In our example below, we are setting renderRequest parameter called “name” and including the view.jsp page to render the result.
  • init() is the method used to initialize portlet. In this example, we are getting “view-template” value from portlet.xml configuration file and setting into a variable called “viewJsp”, which is the render JSP page for VIEW mode.
  • include() is a convenient method used to forward processing to the JSP page. This can be used as a common method to forward processing from any other methods.
  • In the given example we are getting requestDispatcher from portletContext. We also made sure that portletContext is not null before getting the request dispatcher.
  • Liferay by default comes with Apache’s common logging classes. We just need to do a few imports to enable the logging.
  • Complete portlet class  SamplePortlet.java is given below.

SamplePortlet.java:

package com.genportlet;
import com.liferay.portal.kernel.exception.SystemException;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import com.liferay.portal.kernel.log.Log;

public class SamplePortlet extends GenericPortlet {
  public void init() {
     viewJsp = getInitParameter("view-template");
  }
  protected void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws PortletException, IOException
  {
     String name = "ABC";
     renderRequest.setAttribute("name", name);
     try {
        include(viewJsp, renderRequest, renderResponse);
     } 
    catch (SystemException e) {
      e.printStackTrace();
     }
  }

 public void include(String jsp, RenderRequest renderRequest, 
              RenderResponse renderResponse) throws SystemException, 
IOException {
     PortletRequestDispatcher prd = getPortletContext().getRequestDispatcher(jsp);
     if(prd == null) {
        _log.error("Error in adding path..!!");
     }
     else {
       try {
         prd.include(renderRequest, renderResponse);
       } 
       catch (PortletException e) {
         e.printStackTrace();
       }
     }
  }
   protected String viewJsp;
   private static Log _log = LogFactoryUtil.getLog(SamplePortlet.class);
}
  • Add the following code to view.jsp page. Here we are getting the parameter “name” which was set inside doView() method and displaying it.
  • Here we need to add the tag as it gives several objects like RenderRequest, RenderResponse, PortletConfig, etc.

view.jsp:

<%@page import="com.liferay.portal.kernel.util.ParamUtil"%>
<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>
<portlet:defineObjects />

This is the <b>Test</b> portlet in View mode.

<%String param = ParamUtil.get(request, "name", "");%>
<h1>Hello <%=param%>!!!</h1>
  • Now deploy the portlet and add it to a page. Below is the result:
GenericPortlet

Note: Version details: Liferay version 6.2 + Apache Tomcat 7 server.

You may also interested in