我想知道Expression Languages(EL)之间的细节差异。 有JSP EL,JSF EL和Unified EL。
我想知道EL背后的历史以及Java EE应用程序中使用的最新EL。它是最新版本中所有视图技术的EL通用吗?
答案 0 :(得分:214)
2002年6月:JSTL 1.0首次推出EL。这些${}
只能在JSTL标签中使用。它旨在调用Javabean get
方法。
2003年11月:引入了JSP 2.0,EL在javax.servlet.jsp.el
包中从JSTL 1.0迁移到JSP 2.0,它作为J2EE 1.4标准的一部分成为标准EL 。 JSTL 1.1没有EL出货。现在${}
也可以在JSP模板文本的JSTL标记之外工作。
2004年3月:JSF 1.0在javax.faces.el
包中引入了延迟EL 。只有#{}
个才能在JSF标签内部工作。与标准JSP EL ${}
的区别在于它不仅get
,而且还可以set
。这对于托管bean自动创建和设置输入组件的值是必需的。标准EL ${}
也适用于JSF输出标记,但如果它们在范围内不存在则不会自动创建bean,并且它们不会设置输入值。
2005年5月:在准备应于2006年5月发布的新JSP 2.1时,延迟EL #{}
从JSF中提取并与javax.el
中的标准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中的行为相同。
2009年12月:EL从JSP规范中提取出来并成为一个独立的规范,它将独立于JSP维护,第一个版本是EL 2.2(JSR-245),类似于JSP 2.2。主要的新功能是调用参数化方法,而不是仅在#{}
语法中调用Javabean getters / setter,例如#{bean.method(argument)}
。此外,Facelets成为Java EE 6标准的一部分。
2013年6月:推出了EL 3.0,它带有一个独立的EL处理器,允许在普通的Java SE应用程序中使用。其他主要新功能是新的字符串连接运算符+=
,集合对象的新操作,包括流和Lambda表达式->
(甚至在Java 6/7上!)并将常量导入EL范围。
答案 1 :(得分:16)
添加到BalusC的答案......
EL最初由艺术科技集团的Nathan Abramson于2001年构思并实施。当时,该实施被称为最简单的可能表达语言(SPEL)。该实现后来包含在JSTL1.0中。 Nathan是JSR-052 Expert Group的一部分,在JSTL specification中被认为是表达语言背后的驱动力。“特别提到Nathan Abramson是表达背后的驱动力 JSTL中引入的语言“