JSF: как перехватить ответ, отправленный клиенту - PullRequest
0 голосов
/ 02 декабря 2010

Я хочу реализовать некоторую справочную функциональность в моем jsf-приложении

Сценарий:

Когда у пользователей моего приложения возникают проблемы, они отправляют мне скриншоты. Они низкого качества, и я не вижу нужной информации.

Моя идея: я добавляю кнопку помощи в мою страницу jsf. Когда эта кнопка нажата, я сохраняю ответ рендеринга (полученный HTML), который отправляется клиенту на моем жестком диске.

Теперь я могу открыть этот сгенерированный html-файл и увидеть нужную мне информацию (например, значения поля ввода)

Теперь мой вопрос.

Как я могу выполнить эту задачу?

Я пробовал PhaseListener и использую

PrintWriter w = new PrintWriter(System.out); DebugUtil.simplePrintTree(FacesContext.getCurrentInstance().getViewRoot(),"",w);<br>

но это только дерево компонентов, а не полученный html

Другими словами: я хочу захватить вывод FacesContext.getExternalContext (). GetResponse (), который отправляется клиенту

есть идеи?

1 Ответ

2 голосов
/ 02 декабря 2010

Используйте Filter вокруг FacesServlet. Там определяют HttpServletResponseWrapper и, в свою очередь, заставляют getOutputStream() и getWriter() возвращать оболочки оригинальных объектов. В оболочках, помимо делегирования исходной реализации, храните записанные данные в другом месте.

...