Write a filter class.
A filter class should implement one or more of the above mentioned four interfaces and should provide a no argument public constructor. The filter class should also override the init() and destroy() methods of the javax.portlet.filter.PortletFilter interface.
public class HitCounterFilter implements RenderFilter {
private FilterConfig filterConfig = null;
public void init(FilterConfig filterConfig) throws PortletException {
this.filterConfig = filterConfig;
}
public void doFilter(RenderRequest renderRequest, RenderResponse renderResponse, FilterChain filterChain) throws IOException, PortletException {
. . .
StringWriter sw = new StringWriter();
PrintWriter writer = new PrintWriter(sw);
. . .
writer.println();
writer.println("===============");
writer.println("The number of hits is: " +count);
writer.println("===============");
. . .
filterChain.doFilter(renderRequest, renderResponse);
}
public void destroy() {
}
}
|
Add the following XML fragments in the portlet.xml files after you write the portlet filter class.
<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
http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
id="myPortletApp" version="2.0">
<portlet>
...
<filter>
<filter-name>HitCounterRenderFilter</filter-name>
<filter-class>com.sun.portal.portlet.filter
.HitCounterFilter</filter-class>
<lifecycle>RENDER_PHASE</lifecycle>
</filter>
<filter-mapping>
<filter-name>HitCounterRenderFilter</filter-name>
<portlet-name>HelloWorld</portlet-name>
</filter-mapping>
</portlet-app>
|