为什么Facelets比JSF2.0更适合作为视图定义语言呢?

我从JSF2.0开始看到,Facelets视图定义语言是首选的视图定义语言,而不是被遗弃的JSP。 我想了解为什么Facelets比JSF2.0更适合作为视图定义语言? 我知道JSP也有一些模板行为,这是采用Facelets的主要动力。

PS:我已经通过这个post在stackoverflow,但我不认为它回答了我的问题。 因此张贴这是一个单独的问题。

诚然,JSP有一些 模板化function,但是在JSF中使用JSP的最大缺点是JSP一旦遇到模板文本内容就写入响应,而JSF想用它做一些前/后处理。 在JSF 1.0 / 1.1中有以下JSF代码

<h:outputText value="first"> second <h:outputText value="third"> fourth 

会产生

第二,第四,第三

这是在JSF 1.0 / 1.1时代头痛的时期 。 开发人员需要在上面的例子中将所有地方的<f:verbatim>标签封装成类似于secondfourth模板文本。 JSF 1.2已经通过一个改进的视图处理程序来解决这个问题,该视图处理程序parsing了JSP而不是执行它,但由于JSP语法不像XML那样“格式良好”,所以它仍然非常笨拙。 强烈希望基于XML的视图技术,以便可以使用高效的SAXparsing器。 Facelets诞生了(Ken Paulsen的“JSFTemplating”)。

而且,在JSP模板文本中不能使用统一的EL #{} ,导致丑陋 – 对初学者来说不直观 – 混合${}#{} 。 另外,JSTL可以在JSF 1.x上使用JSP作为视图生成时间标签 。 另外,带有<% %>东西的JSP语法是老派,在JSP中embedded原始Java代码的可能性被认为是打破MVC意识形态的一个很差的做法 。

总而言之,在JSF / MVC的angular度来看,JSP简直是丑陋可怕的,而Facelets简直是干净利落的。

我在互联网上find了以下答案。

JSFToolbox文档第3章 :

JSP编译时间开销

每次编辑,保存并重新加载JSP页面时,服务器的JSP编译器都会生成Java servlet代码并将其编译为一个servlet。 这被称为JSP翻译过程,通常它的成本在1-2秒之间,具体取决于服务器的性能。

Facelets XML编译

与JavaServer Pages不同,Facelets页面不会编译到servlet中。 由于Facelets页面符合XML规范,因此Facelets框架使用基于SAX的快速编译器来构build视图。 此外,Facelets可以configuration为立即检测和呈现对页面的更改,从而加快您的JSF开发周期。

从Ian Hlavats预订“JSF 1.2组件”,第49页 :

在JSF应用程序开发期间,我们经常对我们的JSF页面进行更改,导致我们的JSP页面的频繁重新编译,并且这种编译时间开销可能会增加。

Facelets页面是简单的XML文档(XHTMl页面),永远不会编译为servlet,而是使用基于SAX的编译过程为我们的视图构buildUI组件树。 因此,与JSP相比,Facelets从JSP翻译开销中解脱出来的速度更快。