【发布时间】:2012-05-04 15:05:05
【问题描述】:
我需要设置html body-tag 的id 属性(用于硒测试)。但是那个 JSF 2 body 标记 (<h:body>) 没有 id 属性。
那么,如何在 JSF 2 中为 html 正文指定 id 属性?
【问题讨论】:
我需要设置html body-tag 的id 属性(用于硒测试)。但是那个 JSF 2 body 标记 (<h:body>) 没有 id 属性。
那么,如何在 JSF 2 中为 html 正文指定 id 属性?
【问题讨论】:
<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>
【讨论】:
按钮提出新问题。
<h:body id> :)