在了解了JSF 2.2中的HTML5支持之后,我很惊讶地在用Netbeans中的新Web应用程序创建的模板文件中找到与以前的Facelets版本相同的XHTML文档类型。唯一的区别是HTML标记在JSF2.2中读取:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html">
,而不是旧版JSF中的以下代码:
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html">
牢记HTML5的承诺而继续使用XHTML似乎有点错误。如果我从“注册库”而不是“服务器库”中选择2.2,则只能选择使用2.2。这是否影响框架版本应用于项目的方式?
Facelets是否过于依赖XHTML以支持HTML5?
好像几年前在XHTML宣传过多时一样,您误解了XHTML的目的。长话短说:检查我们的XHTMLWiki页面。仔细阅读。简而言之,Facelets完全不关心生成的HTML输出中使用的doctype。您可以完美地在Facelets模板中声明HTML5文档类型。
确实不幸的是,Netbeans默认情况下使用XHTMLdoctype准备文档,而HTML5如今是推荐的doctype。我不使用Netbeans,但是在Eclipse中,您可以轻松地编辑这些模板,甚至创建自己的模板。您可以将整个XHTML文档类型替换为HTML5文档类型。您可以通过IDE首选项中的_Web»HTML文件»编辑器»模板_ 来查找/创建这些模板。
请注意,JSF 2.2中的HTML5支持与能够专门支持HTML5文档类型无关。相反,即使使用旧版JSP,所有JSF版本都支持此功能。JSP和Facelets是允许您生成HTML输出的视图技术,可以完美地将HTML5用作HTML5。以下紧密相关的答案也对此进行了详细说明:是否可以将JSF+ Facelets与HTML 4/5一起使用?
相反,JSF 2.2中的HTML5支持涵盖了定义自定义JSF组件属性并将自定义HTML元素转换为JSF组件的可能性。在JSF 2.1及更高版本中,这是不可能的。data-xxx默认JSF渲染器将忽略所有自定义JSF组件属性(包括HTML5推荐的属性)。另请参见以下相关答案:JSF不呈现自定义HTML标记属性。在JSF 2.2中,您可以通过新的http://xmlns.jcp.org/jsf/passthrough名称空间轻松地指定自定义属性,如下所示:
data-xxx
http://xmlns.jcp.org/jsf/passthrough
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough"> ... <h:inputText ... a:autocorrect="off" />
这最终将由<h:inputText>不支持的属性autocorrect最终实际包含在生成的HTML输出中。请注意,我使用XML名称空间前缀a(“attribute”)而不是Java EE教程中p所示的那样,否则它将与pPrimeFaces的默认XML名称空间前缀冲突。
<h:inputText>
autocorrect
a
p
将自定义HTML元素(包括HTML5元素)转换为JSF组件仅需指定jsf诸如的属性即可jsf:id。
jsf
jsf:id
<html ... xmlns:jsf="http://xmlns.jcp.org/jsf"> ... <header jsf:id="header">...</header> <main jsf:id="main">...</main> <footer jsf:id="footer">...</footer>
那些被掩盖的将变成UIPanel(如<h:panelGroup>)。是的,它们在例如中是可引用的<f:ajax render>。
UIPanel
<h:panelGroup>
<f:ajax render>
换句话说,“ HTML5支持”再次是“自定义属性支持”的另一个流行词。