Listing 1: portlet.xml file
<portlet>
<description>Image Viewer Portlet</description>
<portlet-name>ImageViewerPortlet</portlet-name>
<display-name>Image Viewer Portlet</display-name>
<portlet-class>com.thejavathinktank.portlets.ImageViewerPortlet</portlet-class>
<init-param>
<name>jspView</name>
<value>/jsp/view.jsp</value>
</init-param>
<init-param>
<name>jspEdit</name>
<value>/jsp/edit.jsp</value>
</init-param>
<init-param>
<name>bgColor</name>
<value>white</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
<portlet-mode>EDIT</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>ImageViewer Portlet</title>
<short-title>ImageViewer</short-title>
<keywords>Images, Viewer</keywords>
</portlet-info>
</portlet>
</portlet-app>
Listing 2: The ImageViewerPortlet Java class
package com.thejavathinktank.portlets.imageviewerportlet;
import javax.portlet.*;
import java.io.IOException;
public class ImageViewerPortlet extends GenericPortlet
{
public void init() throws PortletException
{
System.out.println("Entered ImageViewerPortlet.init() method");
}
public void processAction(ActionRequest request, ActionResponse response)
throws PortletException, java.io.IOException
{
PortletMode pm = request.getPortletMode();
System.out.println("PortletMode = " + pm);
if (pm.equals(PortletMode.VIEW))
{
System.out.print("Request Image file is: ");
System.out.println(request.getParameter("filename"));
response.setRenderParameters(request.getParameterMap());
} else if (pm.equals(PortletMode.EDIT))
{
String bgColor = request.getParameter("bgColor");
PortletSession ps = request.getPortletSession();
ps.setAttribute("bgColor", bgColor);
System.out.println("New color = " + bgColor);
}
}
public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
// Assign bg color if it doesn't exist
PortletSession ps = request.getPortletSession();
String bgColor = (String) ps.getAttribute("bgColor");
if (bgColor == null)
{
bgColor = getPortletConfig().getInitParameter("bgColor");
System.out.println("Setting default bg-color to " + bgColor);
ps.setAttribute("bgColor", bgColor);
}
response.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("jspView");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(request, response);
}
public void doEdit(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
response.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("jspEdit");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(request, response);
}
}
Listing 3: The view.jsp file
<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>
<%
PortletURL url = renderResponse.createActionURL();
String filename = (String)renderRequest.getParameter("filename");
PortletSession ps = renderRequest.getPortletSession();
String bgColor = (String)ps.getAttribute("bgColor");
%>
color = <%=bgColor%>
<form method="post" action="<%=url.toString()%>" style="background-color: <%=bgColor%>">
<p>Please enter the name of the image you wish to see</p>
<input type="text" id="filename" name="filename"/>
<br />
<button type="submit">Show Image</button>
</form>
<br />
<%
filename = renderResponse.encodeURL(renderRequest.getContextPath())+"/images/"+filename;
%>
<img src="<%=filename%>"alt="Image will be displayed here">
Listing 4: The edit.jsp file
<%@ page session="false" %>
<%@ page import="javax.portlet.*"%>
<%@ page import="java.util.*"%>
<%@ taglib uri='/WEB-INF/tld/portlet.tld' prefix='portlet'%>
<portlet:defineObjects/>
<h1>
Edit Mode
</h1>
<br>
Please select a color for the background<br>
<%
PortletURL url = renderResponse.createActionURL();
PortletSession ps = renderRequest.getPortletSession();
String bgColor = (String)ps.getAttribute("bgColor");
%>
<form method="post" action="<%=url.toString()%>">
<input name="bgColor" type="radio" value="white"
<%=bgColor.equals("white") ? "CHECKED" : ""%>/>White
<input name="bgColor" type="radio" value="black"
<%=bgColor.equals("black") ? "CHECKED" : ""%>/>Black
<input name="bgColor" type="radio" value="blue"
<%=bgColor.equals("blue") ? "CHECKED" : ""%>/>Blue
<input name="bgColor" type="radio" value="red"
<%=bgColor.equals("red") ? "CHECKED" : ""%>/>Red
<input name="bgColor" type="radio" value="green"
<%=bgColor.equals("green") ? "CHECKED" : ""%>/>Green
<br/>
<button type="submit">Change Color</button>
</form>
<br>
Current Portlet Mode: <%=renderRequest.getPortletMode()%><br>
Current Window State: <%=renderRequest.getWindowState()%><br>
<br>