为什么Facelets比JSF2.0以后的视图定义语言更优先于JSP?

Gee*_*eek 33 jsf jsp facelets jsf-2

我从JSF2.0开始看到,Facelets视图定义语言是首选的视图定义语言,而不是作为遗留后退而被弃用的JSP.我想理解为什么Facelets比JSF2.0以后的视图定义语言更优先于JSP?我知道JSP也有一些模板行为,这是采用Facelets的主要驱动点.

PS:我在stackoverflow上经历过这篇文章,但我不认为它回答了我的问题.因此将此作为单独的问题发布.

Bal*_*usC 43

确实,JSP具有一些 模板功能,但在JSF中使用JSP的最大缺点是JSP在遇到模板文本内容时立即写入响应,而JSF希望使用它进行一些前/后处理.在JSF 1.0/1.1中有以下JSF代码

<h:outputText value="first"> second <h:outputText value="third"> fourth
Run Code Online (Sandbox Code Playgroud)

会产生

第二名第四名

这是在JSF 1.0/1.1期间头疼的问题.开发人员将需要包装模板文本一样second,并fourth在上面的例子<f:verbatim>在所有地方的标签.JSF 1.2已经用改进的视图处理程序解决了它,它解析JSP而不是执行它,但由于JSP语法不像XML那样"格式良好",所以它仍然非常笨拙.强烈需要基于XML的视图技术,以便可以使用基于SAX的高效解析器.Facelets诞生了(在Ken Paulsen的"JSFTemplating"中).

此外,统一的EL #{}不能在JSP模板文本中使用,导致丑陋 - 并且对于初学者而言不直观 - 混合${}#{}.此外,JSTL可以在JSP上的JSF 1.x中不能用作视图构建时间标记.此外,带有<% %>东西的JSP语法是老派,在JSP中嵌入原始Java代码的可能性被认为是打破MVC意识形态的一种非常糟糕的做法.

总而言之,从JSF/MVC的角度来看,JSP简直是丑陋而且非常糟糕,Facelets简直干净且令人敬畏.

  • @BalusC“无法在JSP模板文本中使用统一的EL#{}”。JSP2.1支持统一EL吗? (2认同)
  • 仅在JSP标记中。不在模板文字中。例如,&lt;p&gt;#{user.name} &lt;/ p&gt;`在JSP中不起作用。“ $ {}”表单可以。 (2认同)

小智 12

我在互联网上找到了以下答案.

JSFToolbox文档第3章:

JSP编译 - 时间开销

每次编辑,保存和重新加载JSP页面时,服务器的JSP编译器都会生成Java servlet代码并将其编译为servlet.这称为JSP转换过程,通常需要1-2秒,具体取决于服务器性能.

Facelets XML编译

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

预订Ian Hlavats的"JSF 1.2组件",第49页:

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

Facelets页面是简单的XML文档(XHTMl页面),它们永远不会编译为servlet,而是使用基于SAX的编译过程为视图构建UI组件树.因此,与JSP相比,Facelets更快,因为它没有JSP转换开销.