XML prolog /指令未从XHTML输出中删除

Mat*_*sen 12 xml facelets jsf-2

我开始学习JavaServer Faces(JSF).我正在使用GlassFish 3+.我刚刚在NetBeans中创建了一个新的JSF项目并运行该项目.它工作正常,但在检查XHTML输出时,我注意到XML声明留在了.这弄乱了DOCTYPE声明(它总是应该是文档中的第一个).

在此输入图像描述

JSF应该删除XML声明,还是我做错了什么?

Bal*_*usC 11

默认情况下,Facelets仅从合成(包含文件和复合组件)和标记文件中删除它.它不会从主模板中删除它.只需自己删除它.在编写HTML时,您根本不应该使用XML prolog.

是否将从主模板中删除XML序言在JSF 2.2规范的附录1.1.1.1中规定,该规范描述了<facelets-processing>元素的配置faces-config.xml.XML prolog被描述为"处理指令".在表中,您将看到仅在将模板作为XML或JSPX视图处理时才删除(使用)它.

1.1.1.1 facelets-processing要素

<facelets-processing>元素用于影响Facelets VDL文件的处理.因此,此设置仅适用于那些到达Facelets ViewDeclarationLanguage实现的请求,如通过javax.faces.FACELETS_VIEW_MAPPINGSjavax.faces.DEFAULT_SUFFIX <context-param>条目指定给运行时.该规范为Facelets文件定义了三种处理模式:Facelets XHTML语法,XML View语法和Facelets JSPX语法.最后一种语法旨在简化已使用JSP文档语法(也称为JSPX语法)的应用程序向Facelets的迁移.下表中指定了对这三种模式中每种模式的文件处理的影响.

Valid <process-as> values and their implications on the processing of Facelets.
-----------------------------------------------------------------------------------------
              <process-as>         <process-as>         <process-as>       <process-as>
              html5</process-as>   xhtml</process-as>   xml</process-as>   jspx</process-as>
              HTML 5 (default)     Facelets XHTML       XML View           Facelets JSPX
-----------------------------------------------------------------------------------------
XML Doctype   Simplified to        passed through       consumed           consumed
              <!DOCTYPE html>  

XML           passed through       passed through       consumed           consumed
declaration 

Processing    passed through       passed through       consumed           consumed
instructions

CDATA         passed through       passed through       consumed           consumed
section

Escaping of   escaped              escaped              escaped            not escaped
inline text    

XML           passed through       passed through       consumed           consumed
Comments 
Run Code Online (Sandbox Code Playgroud)

在上表中,"传递"表示内容通过未修改传递给用户代理."consume"表示内容在服务器上以静默方式使用.请注意,对于CDATA部分,即使应该使用开始和结束标记,CDATA部分本身的内容也会通过."转义"意味着响应中的敏感内容会自动转义:例如,&变为"转义" &amp;."未转义"表示此类内容未被转义.

换句话说,当您创作HTML5/XHTML时,您必须自己删除它.实际上更好的措辞是:你不应该在HTML5和XHTML页面中包含XML prolog,因为这不是必需的; 它只在XML和JSPX页面中需要(因此Facelets会自动删除它).

也可以看看:


具体问题无关,您应该使用<h:outputStylesheet>而不是<link rel="stylesheet">独立于请求URL.

<h:outputStylesheet name="css/default.css" />
<h:outputStylesheet name="css/cssLayout.css" />
Run Code Online (Sandbox Code Playgroud)

也可以看看: