2011-01-27 70 views
115

我想知道表达式语言(EL)之间的详细区别。 有JSP EL,JSF EL和Unified EL。JSP EL,JSF EL和统一EL之间的区别

我想知道EL背后的历史以及在Java EE应用程序中使用的最新EL。它是最新版本中所有视图技术的共同EL吗?

+7

为什么“作为封闭不是一个真正的问题”? - 对我来说似乎是一个完全有效的,有益的问题。 – 2015-11-16 15:09:34

回答

207
  • 2002年6月:JSTL 1.0首次与EL一起推出。那些仅在JSTL标签中工作的东西是${}。它旨在调用Javabean get方法。

  • 2003年11:JSP 2.0引入和EL从JSTL 1.0在javax.servlet.jsp.el包移动到JSP 2.0并且它成为标准EL作为J2EE 1.4标准部分。 JSTL 1.1在没有EL的情况下发货。现在,${}也可以在JSP模板文本中的JSTL标签外部工作。

  • Mar 2004:引入JSF 1.0与推迟ELjavax.faces.el包中。这些是仅在JSF标签内部工作的#{}。与标准JSP EL ${}的区别在于,它不仅可以执行get,还可以执行set。这对于托管bean自动创建和设置输入组件的值是必需的。标准EL ${}也适用于JSF输出标签,但如果它们不在范围内,它们将不会自动创建bean,并且它们不会设置输入值。

  • 2005年5月:在新的JSP 2.1应2006年5月发布,推迟EL #{}仍在准备从JSF提取和使用标准EL ${}javax.el包相结合。此时,它变成了统一的EL,它随JSF 1.2一起引入,并成为后来的JSP 2.1和Java EE 5标准的一部分。 #{}现在也可以在JSP标记中使用到get值,但不能使用set值。 ${}现在可以在JSP中自动创建托管的bean,但不是set值。

  • 2006年11月:Facelets作为JSP的后续版本推出。它允许在JSF标记之外的模板文本中使用#{},作为替代<h:outputText>而没有任何属性。它也将${}视为#{},所以它们在Facelets中的表现都相同。 EL是从JSP规范中提取的,并成为独立的规范,独立于JSP,第一个版本是EL 2.2(JSR-245),类似于JSP 2.2。主要的新功能是调用参数化方法,而不是仅在#{}语法中调用Javabean getters/setters,例如, #{bean.method(argument)}。此外,Facelets成为Java EE 6标准的一部分。

  • 2013年6月:EL 3.0引入了独立的EL处理器,允许在普通Java SE应用程序中使用。其他主要的新功能是新的字符串连接运算符+=,集合对象的新操作,包括流和Lambda表达式->(即使在Java 6/7上!)并将常量导入EL范围。

14

添加到BalusC的答案...

EL最初由Art Technology Group的Nathan Abramson在2001年构思并实施,当时该实现被称为最简单可能的表达式语言(SPEL)。该实现后来被包含在JSTL1.0中。内森是JSR-052 Expert Group的一部分,并被记入JSTL specification作为表达语言背后的驱动力。

“特别值得一提弥敦道艾布拉姆森为是在JSTL引入表达 语言背后的驱动力”