属性head
を持つ要素をレンダリングしようとしています。prefix
JSF でこれを行うには:
<h:head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# XXXX: http://ogp.me/ns/fb/XXXX#">
カスタムhead
レンダラーを作成しました。
public class FacebookHeadRenderer extends HeadRenderer{
@Override
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
ResponseWriter writer = context.getResponseWriter();
writer.startElement("head", component);
RenderKitUtils.renderPassThruAttributes(context,
writer,
component,
HEAD_ATTRIBUTES);
System.out.println("FacebookHeadRenderer!");
}
private static final Attribute[] HEAD_ATTRIBUTES;
static {
Attribute[] baseAttributes = AttributeManager.getAttributes(
AttributeManager.Key.OUTPUTHEAD);
HEAD_ATTRIBUTES = new Attribute[baseAttributes.length + 1];
for (int i = 0; i < baseAttributes.length; ++i) {
HEAD_ATTRIBUTES[i] = baseAttributes[i];
}
HEAD_ATTRIBUTES[HEAD_ATTRIBUTES.length - 1] = Attribute.attr("prefix");
}
}
そしてそれをに登録しましたfaces-config.xml
:
<render-kit>
<renderer>
<component-family>javax.faces.Output</component-family>
<renderer-type>javax.faces.Head</renderer-type>
<renderer-class>com.localgp.jsf.FacebookHeadRenderer</renderer-class>
</renderer>
</render-kit>
FacebookRenderer
が呼び出されています (出力されることによって検証されますFacebookHeadRenderer!
) が、prefix
属性はレンダリングされません。
健全性チェックとして、次のlang
属性を追加しました。
<h:head lang="en_AU"
prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# XXXX: http://ogp.me/ns/fb/XXXX#">
そして私が得たのは
<head lang="en_AU">
アイデア?