JSF 2移除渲染输出中的xml声明
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSF 2移除渲染输出中的xml声明相关的知识,希望对你有一定的参考价值。
错误的html输出:
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
...
主模板:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
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:t="http://myfaces.apache.org/tomahawk"
xmlns:c="http://java.sun.com/jsp/jstl/core"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich"
xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<h:head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title><h:outputText value="dmw #{title}"/></title>
<h:outputStylesheet library="#{uiSkin}" name="css/layout.css" />
<h:outputStylesheet library="standard" name="css/developer.css"
rendered="#{developMode}" />
...
</h:head>
<h:body>
包含页面的示例:
<html xmlns="http://www.w3.org/1999/xhtml"
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:t="http://myfaces.apache.org/tomahawk"
xmlns:a4j="http://richfaces.org/a4j"
xmlns:rich="http://richfaces.org/rich">
<ui:composition>
...
</ui:composition>
</html>
使用的版本:
<jsf-api.version>2.1</jsf-api.version>
<jsf-impl.version>2.1.21</jsf-impl.version>
<richfaces.version>4.3.2.Final</richfaces.version>
<prettyfaces.version>3.3.3</prettyfaces.version>
<tomahawk.version>1.1.14</tomahawk.version>
当我删除所有ui:include和ui:insert标签时,一切都很好。我建立了一个较小的Testproject,它也像怀疑的那样工作。加载包含的页面时,似乎发生该错误。不能解决的ui:insert标记不会导致错误。我认为这与渲染配置有关。
我在faces-config中尝试了一些条目,但是没有成功。以下条目将删除不需要的声明以及文档类型。
<faces-config-extension>
<facelets-processing>
<file-extension>.xhtml</file-extension>
<process-as>xml</process-as>
</facelets-processing>
</faces-config-extension>
XML prolog / instruction not removed from XHTML output
我不知道它从哪里来?有人有线索吗?
如果对facelet文件使用'xml'处理方法,则在处理过程中将使用doctype以及处理说明。请参阅此答案中的表格:https://stackoverflow.com/a/10706157/801153。
要重新应用DOCTYPE标记,可以在h:doctype
之前使用jsf html
标记。为此,您需要将标签括在ui:composition
标签中,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<ui:composition xmlns="http://www.w3.org/1999/xhtml"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://xmlns.jcp.org/jsf/facelets">
<h:doctype rootElement="html" xmlns:h="http://java.sun.com/jsf/html" />
<html lang="nl">
... page content ...
</html>
</ui:composition>
此代码段中的处理指令和DOCTYPE适用于.xhtml文件源内容,而不适用于生成的输出。如果您的源文件为xhtml格式,则必须保留这些文件。
或者,您也可以尝试使用'html5'类型,也可以在上面链接的答案的表格中指定。如果您拥有或将源文件创建为html5文件,这将很有用。当未指定任何内容时,这是默认的处理方法。这样会将文档类型保留为简化版本。但是,这也会将任何<?xml .. ?>
处理指令传递到html输出(您的原始发行版)。因此,您应该从源文件中删除这些处理说明。
以上是关于JSF 2移除渲染输出中的xml声明的主要内容,如果未能解决你的问题,请参考以下文章
AJAX 响应:数据(JSON、XML)还是 HTML 片段? [关闭]
从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration