Jetspeed-2 provides an interface for a portlet to be able to support the pre-286 header phase. If you want your portlet to support this, just use GroovyPortletHeaderPhaseSupport class instead of GroovyPortlet, and implement SupportsHeaderPhase interface.
Create the file HelloGroovyHeaderSupport.groovy in a directory called groovy-simplest/WEB-INF/classes:
import javax.portlet.GenericPortlet;
import javax.portlet.PortletContext;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
import javax.portlet.PortletPreferences;
import javax.portlet.ValidatorException;
import org.apache.jetspeed.headerresource.HeaderResource;
import org.apache.jetspeed.portlet.PortletHeaderRequest;
import org.apache.jetspeed.portlet.PortletHeaderResponse;
import org.apache.jetspeed.portlet.SupportsHeaderPhase;
public class HelloGroovyHeaderSupport extends GenericPortlet implements SupportsHeaderPhase
{
public void doHeader(PortletHeaderRequest request, PortletHeaderResponse response)
{
// use header resource component to ensure header logic is included only once
HeaderResource headerResource = response.getHeaderResource();
headerResource.dojoEnable();
headerResource.dojoAddCoreLibraryRequire( "dojo.lang.*" );
headerResource.dojoAddCoreLibraryRequire( "dojo.event.*" );
headerResource.dojoAddCoreLibraryRequire( "dojo.io.*" );
headerResource.dojoAddCoreLibraryRequire( "dojo.widget.*" );
headerResource.dojoAddCoreLibraryRequire( "dojo.widget.Button" );
}
public void doView(RenderRequest request, RenderResponse response)
{
response.setContentType("text/html");
// Let's put a dojo widget button for simplicity here.
response.getWriter().println """
<button widgetId="helloGroovyButton" dojoType="Button" onclick="alert('Hello, Groovy');">
Say Hello
</button>
"""
}
}
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app id="velocitysimplest" version="1.0">
<portlet id="HelloGroovyHeaderSupport">
<portlet-name>HelloGroovyHeaderSupport</portlet-name>
<display-name>Hello Groovy with Header Support Display Name</display-name>
<portlet-class>org.apache.portals.bridges.groovy.GroovyPortletHeaderPhaseSupport</portlet-class>
<init-param>
<name>script-source</name>
<!-- Note: You can set script source in three ways.
The first is to use relative path uri,
the second is to use file: url,
and the last is to classpath: uri -->
<!--
<value>/WEB-INF/groovy/HelloGroovy.groovy</value>
<value>file:/C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/demo/WEB-INF/groovy/HelloGroovy.groovy</value>
-->
<value>classpath:HelloGroovyHeaderSupport.groovy</value>
</init-param>
<!-- If auto-refresh is true, then a modification of script source applies instantly. -->
<init-param>
<name>auto-refresh</name>
<value>true</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>Hello Groovy with Header Support Title</title>
<short-title>Hello Groovy with Header Support Short Title</short-title>
</portlet-info>
</portlet>
</portlet-app>