Setting Markup Head Elements in Portlets

JSR 286 (Portlet 2.0 specification) allows the portlet to set HTML elements like <link>, <script>, <meta> in the <head> section of the portal page. This can be achieved via the addProperty method on the RenderResponse with MimeResponse.MARKUP_HEAD_ELEMENT as property name and org.w3c.dom.Element as value.

Following is the code snippet..
import javax.portlet.GenericPortlet;  
import javax.portlet.RenderRequest;  
import javax.portlet.RenderResponse;  
import javax.portlet.MimeResponse;  
import org.w3c.dom.Element;  
public class TestPortlet extends GenericPortlet {  
    @Override
    protected void doHeaders(RenderRequest request, RenderResponse response) {
        Element metaDescription = response.createElement("meta");
        metaDescription.setAttribute("name", "description");
        metaDescription.setAttribute(
              "content", "everything you want to know about stamps");
        response.addProperty(
              MimeResponse.MARKUP_HEAD_ELEMENT, metaDescription);
        Element metaKeywords = response.createElement("meta");
        metaKeywords.setAttribute("name", "keywords");
        metaKeywords.setAttribute("content", "stamps, history");
        response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, metaKeywords);
    }
....
}

This feature has been implemented in OpenPortal Portlet Container 2.0 Update 1.

There has been lot of confusion regarding the role of container runtime option (javax.portlet.renderHeaders) while setting the headers. I get the following question a lot:

Is the container runtime option (javax.portlet.renderHeaders) needed if the portlet wants to set headers?

The answer: It depends on whether the portal is a streaming portal or a buffering portal.
First the definition: In case of streaming portal, the output of the portlet is not buffered, while it is buffered in case of buffering portal.
The buffering portal can ignore the container runtime option whereas it is mandatory in case of streaming portal.

In case of OpenPortal Portlet Container, Project WebSynergy which are buffering portals, the container runtime option(javax.portlet.renderHeaders) is not required to be present in the portlet.xml of the portlet that wants to set the headers.

Comments:

64

Posted by guest on October 11, 2010 at 03:15 AM IST #

Post a Comment:
  • HTML Syntax: NOT allowed
About

Deepak Gothe

Search

Categories
Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today