我看到从JSF2.0开始,Facelets视图定义语言是首选的视图定义语言,而不是已经被遗弃的JSP。我想了解为什么Facelets比JSP更喜欢作为JSF2.0以上的视图定义语言?我知道JSP也有一些模板行为,
P.S:我已经通过this post在stackoverflow,但我不认为它回答我的问题。因此,将其作为一个单独的问题。
的确,JSP具有大约 templating的功能,但是在JSF中使用JSP的最大缺点是,一旦JSP遇到模板文本内容,JSP就会对响应进行写入,而JSF则希望对它进行一些前/后处理。在JSF 1.0 / 1.1下面的JSF代码<h:outputText value="first"> second <h:outputText value="third"> fourth
会产生
second fourth first third
这是在JSF 1.0 / 1.1年龄的headache期间。开发人员需要在上述示例中的< f:verbatim>中包装模板文本,如第二和第四个。标签在所有地方。 JSF 1.2已经解决了一个改进的视图处理程序,它解析JSP而不是执行它,但是由于JSP语法不像XML那样“格式化”,所以它处于引人注目的状态。强烈希望基于XML的视图技术,因此可以使用基于SAX的高效解析器。而Facelets诞生了(在Ken Paulsen的“JSFTemplating”中)。
另外,统一的EL#{}不能在JSP模板文本中使用,导致丑陋,而对于起始者unintuitive-混合$ {}和#{}。此外,JSTL可能在JSP上的JSF 1.x不能用作view build time tags.此外,JSP语法与<%%>事情是老学校,在JSP中嵌入原始Java代码的可能性被认为是very poor practice,它打破了MVC ideology。
所有这一切,在JSF / MVC的观点,JSP是简单的丑陋和可怕的,Facelets是干净,真棒。