是否有可能使用JSF + Facelets与HTML 4/5?

Facelets依靠XML名称空间来处理XHTML。 HTML 4是如何,据我所知,HTML 5不支持命名空间。 另外,HTML 5还有一些XHTML中没有的新元素。 即使HTML 4和XHTML在它们支持的元素和属性方面也有一些差异。

问题是:是否有可能使用Facelets呈现HTML 4/5文档? 如果是这样,怎么样?

由于Facelets是一种基于XML的视图技术,它本质上是XML标记,所以不能将其与HTML4文档类型一起使用。 HTML4的doctype描述了几个不能自动关闭的元素,比如<link><meta><br><hr> 。 然而,对于XML,您必须像<link/><meta/>等关闭它们。因此,使用HTML4文档类型绝对不是Facelets的选项(也就是说,当您尊重标准和/或担心w3验证器,但是它将在大多数(如果不是全部的话)浏览器上完美工作)。

另一方面,HTML5允许XML标记。 这在3.2.2 – 元素 :

例:

 <link type="text/css" href="style.css"/> 

作者也可以选择在HTML语法中为void元素使用相同的语法。 一些作者也选择在斜线之前加入空格,但这不是必须的。 (以这种方式使用空白是从XHTML 1.0附录C中的兼容性指导原则继承而来的惯例)

我自己也使用<!DOCTYPE html> ,即使没有在页面顶部的<?xml?>声明,也使用JSF / Facelets。 它适用于所有浏览器。 使用XHTML文档类型,您应该按照规范使用Content-Typeapplication/xhtml+xml这只会使MSIE呛(它不明白)。 而且,因为它仍然是使用最广泛的浏览器之一。用text/html代替XHTML内容类型被认为是有害的 ,你也不想这样做。

根据你的论点:

HTML 5不支持名称空间。

这没关系。 命名空间只是基于XML的服务器端视图技术(如Facelets)所感兴趣的,后者又可以用这些标签生成纯HTML。 以下示例对于Facelets是合法有效的:

 <!DOCTYPE html> <html lang="en" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html"> <h:head> <title>Title</title> </h:head> <h:body> <h:outputText value="#{bean.text}" /> </h:body> </html> 

这呈现合法有效的HTML5(用于客户端):

 <!DOCTYPE html> <html lang="en"> <head> <title>Title</title> </head> <body> Some text </body> </html> 

你看,Facelets已经删除了XHTML声明,因为它们在客户端没有意义。

和,

另外,HTML 5还有一些XHTML中没有的新元素

这也没有意义。 这是关于生成的输出。 这可以是HTML5一样好。 唯一的问题可能是浏览器的支持和第三方JSF组件的可用性,这些组件呈现HTML5特定元素。 自JSF 2.2以来,可以使用新的直通元素功能将自定义元素转换为JSF组件。 简单地给HTML5元素一个jsf:id属性。 它将在JSF组件树(如<h:panelGroup> )中透明地在内部解释为UIPanel实例。

 <!DOCTYPE html> <html lang="en" xmlns:jsf="http://xmlns.jcp.org/jsf" xmlns:f="http://xmlns.jcp.org/jsf/core" xmlns:h="http://xmlns.jcp.org/jsf/html" > <h:head> <title>Title</title> </h:head> <h:body> <header jsf:id="header">Header</header> <nav jsf:id="nav">Nav</nav> <main jsf:id="main">Main</main> <footer jsf:id="footer">Footer</footer> </h:body> </html> 

你甚至可以像<f:ajax render="main">那样从ajax引用它。

实际上,XHTML是过度的。 它唯一的目的是使用基于XML的工具来简化HTML开发,这些工具可以在服务器端操作/转换/生成HTML页面(比如Facelets)。 但是一些初学者也使用它,而不使用任何XML工具,并将其原样输出,因为它“非常酷” – 原因不明。

不要误解我的意思 XHTML作为服务器端视图技术非常棒 。 但根本不作为客户端标记技术。 客户端完全没有价值。

也可以看看:

  • 我们的XHTML wiki页面
  • JSF中应该如何查看<!DOCTYPE>部分? HTML5还是XHTML?
  • JavaServer Faces 2.2和HTML5支持,为什么仍然使用XHTML

在相关说明中,查看这篇IBM developerWorks文章: JSF 2 fu:HTML5复合组件,第1部分

MyFaces有一个html5的扩展。 试试这个http://myfaces.apache.org/html5/

我读过,这应该是可能的,但我没有自己做,但。 也许你应该在xHTML包装器代码中使用HTML 5。 我会看到,如果我能再次找到信息来源。

[编辑]似乎,在Goole的夏季代码中,MyFaces已经有一些工作可以支持HTML5的渲染。 但是,我不知道是否应该以高效的方式使用它。

  • MyFaces维基
  • java-doc的
  • Jazzon谈话,下载演示文稿
  • Jazzon tal,用JSF 2浏览HTML 5

请给我们一个反馈,如果你得到它的工作。 [/编辑]