【问题标题】:JavaServer Faces 2.2 and HTML5 support, why is XHTML still being usedJavaServer Faces 2.2 和 HTML5 支持,为什么还在使用 XHTML
【发布时间】:2017-05-28 15:56:36
【问题描述】:

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

【问题讨论】:

  • Facelets 主要基于 XHTML。您的具体问题是什么?
  • 谢谢,我现在可以看到了!我想知道是否有一些 HTML5 版本的 facelets。我认为 facelet 标签完全独立于 html 本身,并且 2.2 将启用 HTML5 类型的 facelets。显然,事情没那么简单。此链接解释了 JSF 2.2 如何将 facelets 呈现为 HTML5,这可能正是我想要的:jsflive.wordpress.com/2013/08/08/jsf22-html5
  • 当您转到渲染页面的源代码时,它将具有 HTML5 文档类型,并且它的所有新功能似乎都可以正常工作。只有 Netbeans 不会为您提供有关 HTML5 标记和属性的自动完成洞察。

标签: html jsf netbeans xhtml facelets


【解决方案1】:

您似乎误解了 XHTML 的目的,就像几年前 XHTML 过度炒作期间的许多人一样。长话短说:检查our XHTML wiki page。仔细阅读。简而言之,Facelets 绝对不关心生成的 HTML 输出中使用的 doctype。您可以在 Facelets 模板中完美地声明 HTML5 文档类型。

不幸的是,Netbeans 默认使用 XHTML doctype 准备文档,而 HTML5 是目前推荐的 doctype。我不使用 Netbeans,但在 Eclipse 中,您可以轻松地编辑这些模板,甚至创建自己的模板。您可以用 HTML5 替换整个 XHTML 文档类型。您可以通过 IDE 首选项中的 Web » HTML Files » Editor » Templates 找到/创建这些模板。

请注意,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 及之前的版本中是不可能的。默认 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" />

这最终会出现在 &lt;h:inputText&gt; 不受支持的属性 autocorrect 中,以实际包含在生成的 HTML 输出中。请注意,我使用 XML 命名空间前缀 a(“属性”)而不是 p,如 the Java EE tutorial 所示,否则它会与 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(如&lt;h:panelGroup&gt;)。是的,它们在例如&lt;f:ajax render&gt;.

换句话说,“HTML5 支持”又是“自定义属性支持”的另一个流行词。

【讨论】:

  • 我想知道它是否有问题,当 URL 仍然类似于 server/app/login.xhtml,但页面本身是 HTML5 并且内容类型是 text/html?或者 URL 应该是 .html 而不是 .xhtml
  • @hinneLinks:如果没有内容类型,浏览器确实会根据 URL 自动猜测。幸运的是,JSF 总是自动包含内容类型。
猜你喜欢
  • 2011-08-31
  • 2014-04-20
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-04-15
  • 2011-06-28
相关资源
最近更新 更多