Написать собственный HtmlResponseWriter JSF - PullRequest
1 голос
/ 02 июля 2010

Для многих внутренних проблем, которые сейчас не учитываются, у нас есть фильтр сервлетов, который изменяет все результаты, которые application/xhtml+xml, и переписывает на text/html;charset=UTF-8, так что даже с использованием фасеток он будет работать без проблем с IE 6.0. 1003 *

Мой вопрос касается HtmlResponseWriter, который является компонентом, отвечающим за рендеринг. Можно ли расширить его и переопределить его методы, чтобы мы достигли желаемого эффекта фильтра?

  • Тип содержимого всегда будет выводиться как text / html;
  • Кодировка всегда будет UTF-8;
  • Тег сценария будет заключен в < ! -- <[[CDATA ]]> -->.

Заранее спасибо.

1 Ответ

1 голос
/ 07 июля 2010

Да, мы расширили компоненты JSF (на самом деле Oracle ADF), чтобы удовлетворить особые требования, которые невозможно выполнить «из коробки».Вам нужно будет получить все исходные файлы этих рендеров и выполнить рекурсивный поиск нарушающего HTML, который вы хотите удалить, application/xhtml+xml.Это просто для того, чтобы убедиться, что он действительно внутри класса HtmlResponseWriter.Каркасы компонентов JSF могут быть сложными, так что вы никогда не знаете, могут быть другие случаи, когда этот заголовок отображается.

Поскольку HtmlResponseWriter не объявлено final, как некоторые компоненты, вы можете просто расширить этои переопределите метод, где application/xhtml+xml печатается и регистрирует его в faces-config.xml.Единственным препятствием для этого является наличие частных переменных, объявленных внутри HtmlResponseWriter, на которые ссылается метод, который необходимо переопределить.В этом случае вы либо не сможете ссылаться на них при повторной реализации, либо вам придется полностью перестроить новый класс HtmlResponseWriter (расширяя ResponseWriter и имитируя каждый метод и переменную экземпляра).Преимущество расширения HTMLResponseWriter заключается в том, что вы будете автоматически получать любые изменения (из обновлений JSF) (кроме разумеется, переопределенного метода).

Обновление: это то, что я сделал для моих лиц-config.xml, но использует Oracle ADF:

<?xml version="1.0" encoding="windows-1252"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee">
  <application>
    <default-render-kit-id>oracle.adf.rich</default-render-kit-id>
  </application>
  <render-kit>
    <render-kit-id>oracle.adf.rich</render-kit-id>
    <renderer>
      <component-family>org.apache.myfaces.trinidad.Input</component-family>
      <renderer-type>oracle.adf.rich.Text</renderer-type>
      <renderer-class>com.company.jsf.renders.text.CustomRenderer</renderer-class>
    </renderer>
  </render-kit>
</faces-config>
...