前言
很久之前,也许你在JSP代码中会遇到类似${person.name}、${person['name']}这样的代码,这样的代码被称之为EL表达式,看起来像不像现在普遍使用的模板引擎thymeleaf里的用法? 早期当Java WEB开发还处在JSP的时代,由于EL表达式的高效性,大家都习惯JSP配合EL表达式快速读取后台返回的数据,可后来因模板引擎的兴起,而Springboot又极力推崇thymeleaf等原因,编程人员都选择了新技术模板引擎来主导项目,导致EL表达式渐渐淡出了大家的视线,乃至于偶尔遇到spring项目时,时常会和thymeleaf模板引擎里的写法搞混,今天给大家说道说道资格EL表达式的前世今生。
EL表达式
EL是JSP 2.0增加的技术规范,其全称是表达式语言(Expression Language),是从 JavaScript 脚本语言得到启发的一种表达式语言,它借鉴了 JavaScript 多类型转换无关性的特点,意在简化jsp页面中java代码的编写。在使用 EL 从 scope 中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。
EL的作用域范围从小到大依次包含page,request,session,application。
当EL表达式中的变量不给定范围时,则默认在page范围查找,然后依次在request、session、application范围查找。也可以用范围作为前缀表示属于哪个范围的变量,例如:${pageScope. userinfo}表示访问page范围中的userinfo变量。
在读取数据时,若EL找不到键值对应的属性值,不会显示null,会显示空字符串。
读取数据
- EL 提供“.“和“[]“两种运算符来读取数据,此外“[]“可以读取动态属性名的值以及包含特殊字符的属性名的值。
- 通过${域名称.键名[索引]}读取list数据;通过${域名称.键名.key}读取map数据。
困惑
了解完了EL表达式后,回过头说说,为什么会纠结EL表达式?
那是因为现在做Springboot开发结合thymeleaf模板引擎使用时,有时想读取后台的数据看看,习惯性思维用JSP那一套${xxx}来输出内容,可偏偏thymeleaf的使用和JSP有点类似, 但是thymeleaf是使用的html静态网页,这个时候你是得不到任何输出的,你必须使用thymeleaf的标签才能输出,类似<p th:text="Hello, ${name}" >message</p>,是不是有点懵圈。这里抓住一个重点就行EL是JSP的产物,和html没有关系的。用了模板引擎就老老实实使用标签吧,不要想着老一套了。
总结
- EL表达式只和JSP挂钩,在html中是无法使用的。
- 要么使用EL + JSP,要么使用thymeleaf + html,两种模式不要混用,鱼和熊掌不可兼得。
- 关于EL表达式和thymeleaf的内容繁多,你又有事情可做了。
- 文章中描述的知识点,只是相对的准确, 不要拿来当教条,更多的知识点请执行学习补充。