Facebook社交插件和JSF



我必须将Facebook社交插件集成到JSF应用程序中。这建议我将fbml名称空间添加到响应中呈现的xhtml文件中。

我的XHTML文件中有:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  ...
  xmlns:fb="http://www.facebook.com/2008/fbml"
  xmlns:og="http://ogp.me/ns#">

但是在呈现的源代码中不会显示fbog名称空间,只显示XHTML名称空间。如何将这些名称空间写入响应?

有这个问题:https://stackoverflow.com/questions/5199176/include-facebook-social-plugins-in-a-jsf2-page,但它还没有回答。

我唯一的想法是创建一个iframe并包含一个简单的XHTML文件(不是Facelet,只是纯XHTML),但这似乎很脏。

我希望有人有更好的解决办法。


附加信息:我使用facelets和seam 2.2.

我假设ResponseWriter.startDocument()打印Doctype和<html>元素,这是正确的吗?或者它只是另一个呈现<html>元素的UIComponent ?如果我能实现自定义ResponseWriter和覆盖startDocument(),并将我的自定义作家设置为默认值,那就太好了。

这让我想到了两个问题:

  1. 我应该重写哪个类,这样我就不必实现抽象ResponseWriter的每个方法?
  2. 我如何告诉我的应用程序使用自定义ResponseWriter ?

或者实现呈现<html>标记的自定义组件是任务吗?我问这个,因为facelets似乎自己渲染<html>标签,似乎没有办法改变这一点,这就是为什么我想到了覆盖ResponseWriter

我发现我只需要编写一个自定义组件:

public class CvHTML extends UIOutput {
    @Override
    public void encodeBegin(final FacesContext context) throws IOException {
        final ResponseWriter writer = context.getResponseWriter();
        writer.startDocument();
        writer.startElement("HTML", null);
        writer.writeAttribute("xmlns", "http://www.w3.org/1999/xhtml", null);
        writer.writeAttribute("xmlns:fb", "http://www.facebook.com/2008/fbml", null);
        writer.writeAttribute("xmlns:og", "http://ogp.me/ns#", null);
    }
    @Override
    public void encodeEnd(final FacesContext context) throws IOException {
        final ResponseWriter writer = context.getResponseWriter();
        writer.endElement("HTML");
        writer.endDocument();
    }
}

在主模板中调用:

<cv:html xmlns="http://www.w3.org/1999/xhtml" lang="en"
    xmlns:s="http://jboss.com/products/seam/taglib"
    ....
    xmlns:cv="http://your.name.space/foo">

相关内容

  • 没有找到相关文章

最新更新