JSF 2 - 如何在HTML输出中保留XML实体定义?

时间:2011-04-26 01:53:28

标签: xml jsf entity facelets doctype

我正在开发一个JSF 2 Web应用程序。如果我定义一个以如下开头的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 "&#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时,实体定义已被删除。如果我真的希望它们包含在输出标记中,有没有办法保留它们?

1 个答案:

答案 0 :(得分: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();