2011-04-26 68 views
3

我正在使用JSF 2 Web应用程序。如果我定义的facelet开头如下:JSF 2 - 如何在HTML输出中保存XML实体定义?

<?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 "&#160;"> 
    <!ENTITY pound "&#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时,实体定义已被删除。如果我真的希望它们包含在输出标记中,是否有办法保留它们?

回答

0

我不知道你是否也可以写一个新的渲染器,但是我有类似的问题来响应XML的结果。

在我的情况下,我抓住了Backing Bean中的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();