JSF 2 — Как сохранить определения объектов XML в выходных данных HTML?

#xml #jsf #entity #facelets #doctype

#xml #jsf #сущность #фасетки #doctype

Вопрос:

Я работаю над веб-приложением JSF 2. Если я определю facelet, который начинается следующим образом:

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN"
"http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"[
    <!ENTITY nbsp "amp;#160;"> 
    <!ENTITY pound "amp;#163;"> 
]>
<html 
    xmlns:ui="http://java.sun.com/jsf/facelets"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:fn="http://java.sun.com/jsp/jstl/functions"
    xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<h:head>
  

При отображении в формате HTML определения объектов были удалены. Есть ли способ сохранить их, если я действительно хочу, чтобы они были включены в разметку выходных данных?

Ответ №1:

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

В моем случае я использовал HttpOutputStream в вспомогательном компоненте и написал XML. Возможно, если вы пропустите close и ctx.responseComplete() из моего примера, JSF обычно записывает свой ответ в поток.

 FacesContext ctx = FacesContext.getCurrentInstance();

final HttpServletResponse resp = (HttpServletResponse)ctx.getExternalContext().getResponse();
resp.getOutputStream().write(xml.getBytes());
resp.getOutputStream().flush();
resp.getOutputStream().close();

ctx.responseComplete();