JSP EL、JSF EL和统一EL的区别

125

我希望了解表达式语言(EL)之间的详细区别,其中包括JSP EL、JSF EL和统一 EL。

我想了解 EL 背后的历史,并且最新的 EL 在 Java EE 应用程序中的使用情况。它是最新版本中所有视图技术通用的 EL 吗?

2个回答

225
  • 2002年6月:JSTL 1.0首次引入了EL。它是那些只在JSTL标签中起作用的${}东西,并设计用于调用Java Bean的get方法。

  • 2003年11月:JSP 2.0被引入并将EL从JSTL 1.0移动到javax.servlet.jsp.el包中,成为J2EE 1.4标准的一部分。JSTL 1.1不再包含EL。此时,${}也可以在JSP模板文本之外的位置工作。

  • 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中提取出来,并与标准EL${}结合在javax.el包中。此时,它成为了统一表达式语言(Unified EL),并在JSF 1.2中引入,后来成为JSP 2.1和Java EE 5标准的一部分。现在#{}也可以用于JSP标记中以get获取值,但不能用于set设置值。${}现在在JSP中还可以自动创建托管bean,但不能set设置值。

  • 2006年11月:Facelets作为JSP的继任者被引入。它允许在模板文本中使用#{},而不需要任何属性,作为<h:outputText>的替代品,位于JSF标记外。它还将${}视为#{},因此它们在Facelets中的行为相同。

  • 2009年12月:EL从JSP规范中提取出来,成为一个独立的规范,将独立于JSP进行维护,第一个版本是EL 2.2(JSR-245),与JSP 2.2相似。主要新功能是在#{}语法内调用带参数的方法,而不仅仅是调用JavaBean getter/setter,例如#{bean.method(argument)}。此外,Facelets成为Java EE 6标准的一部分。

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


  • 18

    在BalusC的回答中,还有一些需要补充的内容...

    EL最初由Art Technology Group的Nathan Abramson于2001年构思和实现。当时的实现被称为Simplest Possible Expression Language (SPEL),后来被包含在JSTL1.0中。Nathan是JSR-052专家组的成员,并被认为是表达式语言背后的推动力量,在JSTL规范中得到了认可。

    “特别感谢Nathan Abramson成为引入JSTL中表达式语言的推动力量。”


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接