如何在JSF 2中指定body id属性?

时间:2012-05-04 15:05:06

标签: java jsf jsf-2

我需要设置html id - 标签的body属性(用于硒测试)。但是JSF 2 body标记(<h:body>)没有id属性。

那么,如何在JSF 2中为html主体指定id属性?

1 个答案:

答案 0 :(得分:4)

<h:body>确实不支持它(诚然,令我惊讶的是,它在HTML中完全有效)。我已经将它作为issue 2409报告给了JSF人员。

同时,假设您正在使用Mojarra,您可以通过扩展Mojarra的BodyRenderer来解决这个问题,如下所示:

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");
        }
    }

}

要使其运行,请在faces-config.xml中按如下方式注册(不,@FacesRenderer注释魔法不会覆盖标准渲染器。)

<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>