Upgrading JSR-168 Portlets to JSR-286

General considerations

 

You shouldn't have anything to do if you are not planning to use any JSR-286 specific features.

 

There are however some things to be aware of, in particular:

  • Portlet URLs are now XML escaped by default
  • Specifying multiple values for a parameter now must create a value array
  • getProtocol now returns ‘HTTP/1.1’ instead of null
  • RenderResponse.setContentType no longer required to be called before retrieving output stream or writer

 

As usual, please refer to the specification for more details.

 

JSP taglib considerations

If you plan to update a JSR-168 portlet that uses the JSR-168 JSP taglib to use the new JSR-286 features, you will need to update the taglib declarations in your JSPs in order for Portal to properly inject the correct version of the associated TLD in your portlet application.

 

If you don't update the taglib declarations, you will see the following symptomatic error on the console:

ERROR [DefaultPageControlPolicy] Rendering portlet window  produced an error
javax.portlet.PortletException: org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/portlet cannot be resolved in either web.xml or the jar files deployed with this application

 

To upgrade your taglib declaration, you just need to change the existing declaration to read:

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

instead of:

<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %>