Facebook социальные плагины и JSF - PullRequest
0 голосов
/ 23 августа 2011

Мне нужно интегрировать социальные плагины 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#">

Но fb и ogпространство имен не будет отображаться в отрендеренном источнике, только пространство имен XHTML.Как я могу получить эти пространства имен записанными в ответе?

Есть эта проблема: https://stackoverflow.com/questions/5199176/include-facebook-social-plugins-in-a-jsf2-page, но на нее еще не ответили.

Единственная идея, которая у меня есть, этосделать iframe и включить простой файл XHTML (не Facelet, просто чистый XHTML), но это выглядит грязно.

Надеюсь, у кого-то есть лучшее решение для этого.


Дополнительная информация: я использую Facelets и шов 2.2.

Я предполагаю, что ResponseWriter.startDocument() печатает Doctype и элемент <html>, это правильно?Или это просто еще один UIComponent, который отображает элемент <html>?Было бы неплохо, если бы я мог просто реализовать пользовательский ResponseWriter и переопределить startDocument() и установить свой собственный писатель по умолчанию.

Это приводит меня к 2 вопросам:

  1. Какойкласс, который я должен переопределить, чтобы мне не приходилось реализовывать каждый метод абстрактного ResponseWriter?
  2. Как мне сказать моему приложению использовать свой пользовательский ResponseWriter?

Или реализует пользовательский компонент, который отображает тег <html>?Я спрашиваю об этом, потому что Facelets, похоже, отображает тег <html> сам по себе, и, кажется, нет никакого способа изменить это, поэтому я придумал переопределить ResponseWriter.

1 Ответ

1 голос
/ 26 августа 2011

Я узнал, что мне просто нужно написать собственный компонент:

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