JavaServer Faces 2.2和HTML5支持,为什么还在使用XHTML

时间:2013-10-04 19:34:45

标签: html5 jsf netbeans xhtml facelets

阅读了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?

1 个答案:

答案 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支持”又是“自定义属性支持”的另一个流行语。