EL表达式非常好用,好用的吓死人 ~
步骤1:取值
步骤2:作用域优先级
步骤3:JavaBean概念
步骤4:获取JavaBean的属性
步骤5:结合JSTL的<c:forEach
步骤6:取参
步骤7:eq
示例 1 : 取值
不同版本的tomcat是否默认开启对EL表达式的支持,是不一定的。
所以为了保证EL表达式能够正常使用,需要在<%@page 标签里加上isELIgnored="false"
使用EL表达式,非常简单
比如使用JSTL输出要写成
<c:out value= "${name}" /> |
但是用EL只需要
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> < c:set var = "name" value = "${'gareen'}" scope = "request" /> 通过标签获取name: < c:out value = "${name}" /> < br > 通过 EL 获取name: ${name} |
示例 2 : 作用域优先级
EL表达式可以从pageContext,request,session,application四个作用域中取到值,如果4个作用域都有name属性怎么办?
EL会按照从高到低的优先级顺序获取
pageContext>request>session>application
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> < c:set var = "name" value = "${'gareen-pageContext'}" scope = "page" /> < c:set var = "name" value = "${'gareen-request'}" scope = "request" /> < c:set var = "name" value = "${'gareen-session'}" scope = "session" /> < c:set var = "name" value = "${'gareen-application'}" scope = "application" /> 4个作用域都有name,优先获取出来的是 : ${name} |
示例 3 : JavaBean概念
EL可以很方便的访问JavaBean的属性,那么JavaBean是什么呢?
JavaBean的标准
1. 提供无参public的构造方法(默认提供)
2. 每个属性,都有public的getter和setter
3. 如果属性是boolean,那么就对应is和setter方法
比如示例代码中的Hero类,默认提供了一个无参的public的构造方法。 同时每个属性都有getter和setter
package bean; public class Hero { public int id; public String name; public float hp; public int damage; public int getId() { return id; } public void setId( int id) { this .id = id; } public String getName() { return name; } public void setName(String name) { this .name = name; } public float getHp() { return hp; } public void setHp( float hp) { this .hp = hp; } public int getDamage() { return damage; } public void setDamage( int damage) { this .damage = damage; } } |
示例 4 : 获取JavaBean的属性
获取JavaBean的属性,只需要通过.符号操作就可以了。
像这样 ${hero.name} ,就会自动调用getName方法了
注: 如果属性是boolean类型,那么就会自动调用isXXX方法了
<%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" isELIgnored= "false" import = "bean.*" %> <%@ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" %> <% Hero hero = new Hero(); hero.setName( "盖伦" ); hero.setHp( 616 ); request.setAttribute( "hero" , hero); %> 英雄名字 : ${hero.name} <br> 英雄血量 : ${hero.hp} |
示例 5 : 结合JSTL的<c:forEach
EL还可以结合 JSTL的<c:forEach 使用,进一步简化代码
原代码中的
<c:out value= "${hero}" /> |
可以简写为
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% List< String > heros = new ArrayList< String >(); heros.add("塔姆"); heros.add("艾克"); heros.add("巴德"); heros.add("雷克赛"); heros.add("卡莉丝塔"); request.setAttribute("heros",heros); %> < table width = "200px" align = "center" border = "1" cellspacing = "0" > < tr > < td >编号</ td > < td >英雄</ td > </ tr > < c:forEach items = "${heros}" var = "hero" varStatus = "st" > < tr > < td >${st.count}</ td > < td >${hero}</ td > </ tr > </ c:forEach > </ table > |
示例 6 : 取参
EL表达式还可以做到request.getParameter("name") 这样的形式获取浏览器传递过来的参数
先把jstl.jsp代码改为如例所示,然后访问如下地址
http: //127.0.0.1/jstl.jsp?name=abc |
可以观察到获取了参数 name
<%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" import = "java.util.*" isELIgnored= "false" %> ${param.name} |
示例 7 : eq
进行条件判断,大大简化了 JSTL的 c:if 和 c:choose 代码
如例,一行代码就能起到其他好几行代码的效果
${killNumber ge 10 ? "超神" : "还没超神" } |
例子中讲的是大于等于,除此之外的其他用法如下:
eq相等 ne、neq不相等,
gt大于, lt小于
gt大于, lt小于
gte、ge大于等于
lte、le 小于等于
not非 mod求模
is [not] div by是否能被某数整除
is [not] even是否为偶数
is [not] odd是否为奇
<%@ page language= "java" contentType= "text/html; charset=UTF-8" pageEncoding= "UTF-8" import = "java.util.*" %> <%@ taglib uri= "http://java.sun.com/jsp/jstl/core" prefix= "c" %> <% request.setAttribute( "killNumber" , "10" ); %> c: if 的用法,运行结果: <c: if test= "${killNumber>=10}" > 超神 </c: if > <c: if test= "${killNumber<10}" > 还没超神 </c: if > <br> c:choose 的用法,运行结果: <c:choose> <c:when test= "${killNumber>=10}" > 超神 </c:when> <c:otherwise> 还没超神 </c:otherwise> </c:choose> <br> EL表达式eq的用法,运行结果: ${killNumber ge 10 ? "超神" : "还没超神" } |
更多内容,点击了解: https://how2j.cn/k/jsp/jsp-el/579.html