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