17

在阅读了JSF 2.2 中的 HTML5 支持后,我惊讶地发现在使用 Netbeans 中的新 Web 应用程序创建的模板文件中的 XHTML 文档类型与以前的 Facelets 版本相同。唯一的区别是 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">

考虑到 HTML5 的承诺而继续使用 XHTML 似乎有点错误。如果我从“注册库”而不是“服务器库”中选择它,我只能选择使用 2.2。这会影响框架版本应用于项目的方式吗?

Facelets 是否过于依赖 XHTML 以支持 HTML5?

4

1 回答 1

37

在几年前 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 支持”又是“自定义属性支持”的另一个流行词。

于 2013-10-04T22:48:56.470 回答