Ralph
Ralph

Reputation: 120831

How to spefic the body id attribute in JSF 2?

I need to set the id attribute of the html body-tag (for selenium test). But that JSF 2 body tag (<h:body>) has no id attribute.

So, how can I specify the id attribute for the html body in JSF 2?

Upvotes: 2

Views: 1943

Answers (1)

BalusC
BalusC

Reputation: 1108922

The <h:body> does indeed not support it (admittedly also to my surprise; it's perfectly valid in HTML). I have reported it to the JSF guys as issue 2409.

In the meanwhile, assuming that you're using Mojarra, you could solve this by extending Mojarra's BodyRenderer as follows:

package com.example;

import java.io.IOException;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import com.sun.faces.renderkit.html_basic.BodyRenderer;

public class BodyWithIdRenderer extends BodyRenderer {

    @Override
    public void encodeBegin(FacesContext context, UIComponent component) throws IOException {
        super.encodeBegin(context, component);

        if (component.getId() != null) {
            context.getResponseWriter().writeAttribute("id", component.getClientId(context), "id");
        }
    }

}

To get it to run, register it as follows in faces-config.xml (no, the @FacesRenderer annotation magic won't work as to overriding the standard renderers).

<render-kit>
    <renderer>
        <component-family>javax.faces.Output</component-family>
        <renderer-type>javax.faces.Body</renderer-type>
        <renderer-class>com.example.BodyWithIdRenderer</renderer-class>
    </renderer>
</render-kit>

Upvotes: 4

Related Questions