1

属性headを持つ要素をレンダリングしようとしています。prefixJSF でこれを行うには:

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

アイデア?

4

1 に答える 1