是否有可能使用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-Type
的application/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
请给我们一个反馈,如果你得到它的工作。 [/编辑]
http://wiki.whatwg.org/wiki/HTML_vs._XHTML提供了一些关于如何在HTML5中使用名称空间来帮助从XHTML迁移的有用信息。; 也许你可以尝试应用这个命名空间,看看会发生什么?
- 错误分析/page.xhtml:跟踪错误实体“nbsp”被引用,但未声明
- 我需要将哪些XHTML文件放在/ WEB-INF中,哪些不是?
- JSF使用plain / raw XHTML / XML / EL源返回空白/未分析的页面,而不是呈现的HTML输出
- 如何在运行时exception被servlet抛出时在浏览器中显示用户友好的错误页面?
- 如何在JSF中显示我的应用程序的错误?
- 使用.jsp或.xhtml或.jsf扩展名创buildJSF页面有什么区别?
- 如何在Facelets中的EL布尔expression式中使用&&?
- 为什么Facelets比JSF2.0更适合作为视图定义语言呢?
- 如何发送表单input值并调用JSF bean中的方法