2015-02-16 1 views
3

У меня этот вариант использования в приложении JSF.Написание простого HTML в веб-приложении на основе JSF

Предполагается, что в веб-приложении JSF у меня есть кнопка, которая вызывает внешнюю службу, которая возвращает полный ответ HTML, и как я могу показать, что ответ HTML для браузеров пользователей?

Последовательность событий выглядит следующим образом.

  1. В браузере пользователя отображается мое приложение. Кнопка, которую пользователь может щелкнуть.
  2. Нажатие кнопки вызывает внешнюю службу. Внешняя служба вернет информацию об определенных тегах HTML. HTML дополнен как голова/тело, так и javascript. В настоящее время служба может быть реализована через службу REST или простой вызов БД, а затем
  3. Как я могу отобразить этот тег HTML в своем браузере пользователя?

Возможно ли это, чтобы написать вывод, не являющийся JSF, в веб-приложении JSF?

Просто чтобы добавить, я думаю, что моя проблема заключается в том, как написать HTML в моем бэкэнде и записать его обратно в браузер пользователей.

+0

Звучит как обычный клиентский javascript-вызов ajax, который извлекает данные из какого-то внешнего источника и добавляет его в тело страницы? Я бы не знал, почему здесь нужно задействовать сервер. – Gimby

+0

Это сторонний сайт, поэтому мы не можем контролировать, какую информацию они отправят. HTML-код возврата содержит пользовательский код javascript, поэтому мне просто нужно показать сгенерированную разметку html для пользователя. –

+0

@MarkEstrada. Почему бы вам не отбросить этот html в диалоговом окне и отобразить его пользователю в результате нажатия на его кнопку. – Daniel

ответ

2

Просто напишите его прямо на HTTP response body, после чего вы проинструктируете JSF, что response is manually completed. Принцип не сильно отличается от How to provide a file download from a JSF backing bean?, за исключением того, что вам нужно установить размещение контента на inline (это уже по умолчанию).

public void writeHtmlResponse() throws IOException { 
    FacesContext fc = FacesContext.getCurrentInstance(); 
    ExternalContext ec = fc.getExternalContext(); 

    ec.setResponseContentType("text/html;charset=UTF-8"); 
    ec.setResponseCharacterEncoding("UTF-8"); 
    ec.getResponseOutputStream().write(html.getBytes("UTF-8")); 

    fc.responseComplete(); // Important! Otherwise JSF will attempt to render the response which obviously will fail since it's already written with a file and closed. 
} 
+0

Будет ли это работать, даже если мое приложение JSF является устаревшим 1.X-приложением? –

+1

В будущем, пожалуйста, прямо укажите версию в вопросе. В эти дни никто не ожидает, что вы работаете над версией EOL. Подсказки JSF 1.x приведены в ссылке за «Как передать загрузку файла в бэкбон JSF?». – BalusC

Смежные вопросы