我想知道表达语言(EL)之间的详细区别。有JSP EL,JSF EL和Unified EL。
我想知道EL背后的历史以及Java EE应用程序中使用的最新EL是什么。EL是最新版本中所有视图技术的通用符号吗?
2002年6月:EL首次引入JSTL 1.0。这些${}东西仅在JSTL标签中有效。它旨在调用Javabean get方法。
${}
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标记之外使用。
javax.servlet.jsp.el
2004年3月:JSF 1.0引入了带有 延迟EL 的javax.faces.el包装。那些#{}东西仅在JSF标记内起作用。与标准JSP EL的区别${}在于它不仅可以做get,而且可以做set。这对于托管bean自动创建和设置输入组件的值是必需的。标准EL也${}可以在JSF输出标签中使用,但是如果它们在作用域中尚不存在,并且它们将不会设置输入值,它们将不会自动创建bean。
javax.faces.el
#{}
set
2005年5月:在新的JSP 2.1应2006年5月发布的还在准备,递延EL #{}从JSF提取和使用标准EL相结合${}的javax.el包。那时,它成为JSF 1.2引入的 统一EL ,后来成为JSP 2.1和Java EE 5标准的一部分。#{}现在,也可以在JSP标记中将该get值用于值,但不能将其用于set值。${}现在,JSP中的can也可以自动创建托管bean,但不能自动创建set值。
javax.el
2006年11月:Facelets被引入为JSP的继承者。它允许#{}在JSF标签外部使用模板文本,以替代<h:outputText>没有任何属性的情况。它还对待${}的#{},所以他们都表现得Facelets中一样。
<h:outputText>
2009年12月:EL从JSP规范中提取出来,成为独立于JSP的独立规范,第一个版本是EL 2.2(JSR-245),类似于JSP 2.2。主要的新功能是调用参数化方法,而不是仅在#{}语法(例如)内调用Javabean getter / setter #{bean.method(argument)}。此外,Facelets成为Java EE 6标准的一部分。
#{bean.method(argument)}
2013年6月:推出了带有独立EL处理器的EL 3.0,允许在纯Java SE应用程序中使用。其他主要的新功能包括新的字符串连接运算符+=,集合对象的新操作,包括流和Lambda表达式->(甚至在Java 6/7上!),以及将常量导入EL范围。
+=
->