为什么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>
标签封装成类似于second
和fourth
模板文本。 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翻译开销中解脱出来的速度更快。
- 如何在Facelets中的EL布尔expression式中使用&&?
- 如何在Facelets模板中引用CSS / JS / image资源?
- 如何创builddynamic的JSF表单域
- 为什么我需要在另一个组件中使用rendered =“#{some}”嵌套一个组件,当我想要更新它时?
- JSF使用plain / raw XHTML / XML / EL源返回空白/未分析的页面,而不是呈现的HTML输出
- 错误分析/page.xhtml:跟踪错误实体“nbsp”被引用,但未声明
- 如何插入非破坏空格字符&nbsp; 在一个JSF页面?
- 何时使用<ui:include>,标记文件,复合组件和/或自定义组件?
- 实体名称必须紧跟在实体引用中的“&”之后