一尘不染

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

html

在了解了JSF 2.2中的HTML5支持之后,我很惊讶地在用Netbeans中的新Web应用程序创建的模板文件中找到与以前的Facelets版本相同的XHTML文档类型。唯一的区别是HTML标记在JSF2.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,则只能选择使用2.2。这是否影响框架版本应用于项目的方式?

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


阅读 266

收藏
2020-05-10

共1个答案

一尘不染

好像几年前在XHTML宣传过多时一样,您误解了XHTML的目的。长话短说:检查我们的XHTMLWiki页面。仔细阅读。简而言之,Facelets完全不关心生成的HTML输出中使用的doctype。您可以完美地在Facelets模板中声明HTML5文档类型。

确实不幸的是,Netbeans默认情况下使用XHTMLdoctype准备文档,而HTML5如今是推荐的doctype。我不使用Netbeans,但是在Eclipse中,您可以轻松地编辑这些模板,甚至创建自己的模板。您可以将整个XHTML文档类型替换为HTML5文档类型。您可以通过IDE首选项中的_Web»HTML文件»编辑器»模板_ 来查找/创建这些模板。

请注意,JSF
2.2中的HTML5支持与能够专门支持HTML5文档类型无关。相反,即使使用旧版JSP,所有JSF版本都支持此功能。JSP和Facelets是允许您生成HTML输出的视图技术,可以完美地将HTML5用作HTML5。以下紧密相关的答案也对此进行了详细说明:是否可以将JSF+ Facelets与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" />

这最终将由<h:inputText>不支持的属性autocorrect最终实际包含在生成的HTML输出中。请注意,我使用XML名称空间前缀a(“attribute”)而不是Java EE教程中p所示的那样,否则它将与pPrimeFaces的默认XML名称空间前缀冲突。

将自定义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支持”再次是“自定义属性支持”的另一个流行词。

2020-05-10