Today I wanted to add an attribute to the <BODY> element of my XPage. My goal was to generate HTML code like this:
<body role="document">
After some testing I found a solution by overwriting the method encodeHtmlBodyStart. To do this, you have to extend the class ViewRootRendererEx2:
package ch.hasselba.xpages;
import java.io.IOException;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import com.ibm.xsp.component.UIViewRootEx;
import com.ibm.xsp.renderkit.html_basic.ViewRootRendererEx2;
public class MyViewRootRenderer extends ViewRootRendererEx2 {
@Override
protected void encodeHtmlBodyStart(FacesContext fc, UIViewRootEx uiRoot,
ResponseWriter writer) throws IOException {
writer.startElement("body", uiRoot);
writer.writeAttribute("role", "document", "role");
writeln(writer);
}
}
To activate it you have to change the renderer class in the faces-config.xml:
<faces-config>
<render-kit>
<renderer>
<component-family>javax.faces.ViewRoot</component-family>
<renderer-type>com.ibm.xsp.ViewRootEx</renderer-type>
<renderer-class>ch.hasselba.xpages.MyViewRootRenderer</renderer-class>
</renderer>
</render-kit>
</faces-config>
Now, the attribute is added correctly to my HTML code: