在几年前 XHTML 过度炒作期间,您似乎误解了 XHTML 的目的。长话短说:查看我们的 XHTML wiki 页面。仔细阅读。简而言之,Facelets 绝对不关心生成的 HTML 输出中使用的 doctype。您可以在 Facelets 模板中完美地声明 HTML5 文档类型。
不幸的是,Netbeans 默认使用 XHTML doctype 准备文档,而 HTML5 现在是推荐的 doctype。我不使用 Netbeans,但在 Eclipse 中,您可以轻松地编辑这些模板,甚至创建自己的模板。您可以用 HTML5 替换整个 XHTML 文档类型。您可以通过IDE 首选项中的Web » HTML 文件 » 编辑器 » 模板查找/创建这些模板。
请注意,JSF 2.2 中的 HTML5 支持与是否能够专门支持 HTML5 文档类型无关。相反,所有 JSF 版本都支持这一点,即使在使用旧版 JSP 时也是如此。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 及之前的版本中是不可能的。data-xxx
默认的 JSF 渲染器会简单地忽略任何自定义 JSF 组件属性(包括 HTML5 推荐的属性)。另请参阅以下相关答案:JSF 不呈现自定义 HTML 标记属性。在 JSF 2.2 中,您可以通过新http://xmlns.jcp.org/jsf/passthrough
命名空间轻松指定自定义属性,如下所示:
<html ... xmlns:a="http://xmlns.jcp.org/jsf/passthrough">
...
<h:inputText ... a:autocorrect="off" />
这最终会在 by <h:inputText>
unsupported 属性autocorrect
中实际包含在生成的 HTML 输出中。请注意,我使用a
("attribute") 的 XML 命名空间前缀,而不是Java EE 教程p
中所示的那样,否则它会与PrimeFaces 的默认 XML 命名空间前缀发生冲突。p
将自定义 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
(如 as <h:panelGroup>
)。是的,它们可以在 eg 中引用<f:ajax render>
。
换句话说,“HTML5 支持”又是“自定义属性支持”的另一个流行词。