阅读了HTML5 support in JSF 2.2之后,我惊讶地发现在Netbeans中使用新的Web应用程序创建的模板文件中,与以前的Facelets版本相同的XHTML文档类型。唯一的区别是HTML标记读入JSF 2.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">
使用XHTML并考虑到HTML5的承诺似乎有点不对劲。如果我从“已注册的库”而不是“服务器库”中选择它,我只能选择使用2.2。这是否会影响框架版本应用于项目的方式?
Facelets是否过分依赖XHTML来支持HTML5?
答案 0 :(得分:33)
似乎你误解了XHTML的目的,就像几年前在XHTML过度使用过程中的许多人一样。长话短说:查看our XHTML wiki page。仔细阅读。简而言之,Facelets绝对不关心生成的HTML输出中使用的doctype。您可以在Facelets模板中完美地声明HTML5文档类型。
毫无疑问,Netbeans默认使用XHTML doctype准备文档,而HTML5现在是推荐的doctype。我不做Netbeans,但在Eclipse中你可以轻松编辑这些模板甚至创建自己的模板。您只需用HTML5替换整个XHTML文档类型即可。您可以通过IDE首选项中的 Web»HTML文件»编辑器»模板查找/创建这些模板。
请注意,JSF 2.2中的HTML5支持与能够专门支持HTML5 doctype无关。相反,即使在使用旧版JSP时,所有JSF版本都支持此功能。 JSP和Facelets是一种视图技术,它允许您生成HTML输出,这可以很好地成为HTML5。以下密切相关的答案也详细阐述了这一点:Is it possible to use JSF+Facelets with HTML 4/5?
相反,JSF 2.2中的HTML5支持涵盖了定义自定义JSF组件属性并将自定义HTML元素转换为JSF组件的可能性。这在JSF 2.1和之前是不可能的。默认的JSF渲染器忽略了任何自定义JSF组件属性(包括HTML5推荐的data-xxx
属性)。另请参阅以下相关答案:Custom HTML tag attributes are not rendered by JSF。在JSF 2.2中,您可以通过新的http://xmlns.jcp.org/jsf/passthrough
命名空间轻松指定自定义属性,如下所示:
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autocorrect="off" />
这将最终在<h:inputText>
不受支持的属性autocorrect
中实际包含在生成的HTML输出中。请注意,我使用a
(“attribute”)而不是p
的XML命名空间前缀,如the Java EE tutorial中所示,否则它将与默认的XML命名空间前缀p
冲突PrimeFaces。
将自定义HTML元素(包括HTML5元素)转换为JSF组件,需要指定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>
。
换句话说,“HTML5支持”又是“自定义属性支持”的另一个流行语。