Modify the HTML head section of a JSR 286 portlet
To write into the HTML head section of the JSR 286 portlet, for example, to change a page title, use the addProperty method on the PortletResponse.
Invoke the addProperty method to modify the HTML head section.
- PortletReponse.addProperty(String key, org.w3c.dom.Element element)
When modifying the HTML head section, we must invoke the addProperty method before the response headers are committed. This should occur no later than during the render headers sub phase of the render lifecycle phase.
Example
Example:
protected void doHeaders(RenderRequest request, RenderResponse response) { Element title = response.createElement("title"); title.setTextContent("My Portal Page Title"); response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, title); }
What to do next
If we add a script tag to the portlet head section, be sure to add text to the tag. If we do not add text, the script tag is not closed properly. Consider the following incorrect code sample from a doHeader :
String url = "/sample.js"; Element scriptElement = response.createElement(Tag.SCRIPT.toString()); scriptElement.setAttribute(Attribute.TYPE.toString(), "text/javascript"); scriptElement.setAttribute(Attribute.SRC.toString(), url); response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, scriptElement);This generates a script tag in the header like as follows:<script src="/sample.js" type="text/javascript" />
This causes rendering problems in Mozilla FireFox and other browsers.
The code needs to call setTextContent with a non-empty string as given in the fifth line of the following code sample:
String url = "/sample.js"; Element scriptElement = response.createElement(Tag.SCRIPT.toString()); scriptElement.setAttribute(Attribute.TYPE.toString(), "text/javascript"); scriptElement.setAttribute(Attribute.SRC.toString(), url); scriptElement.setTextContent(" "); response.addProperty(MimeResponse.MARKUP_HEAD_ELEMENT, scriptElement);This generates a properly closed script tag in the header as follows:<script src="/sample.js" type="text/javascript"> </script>