取值
不同版本的 tomcat 是否默认开启对 EL 表达式的支持是不同的,所以为了 EL 表达式能正常使用,需要在 <%@page
标签里加上 isELIgnored="false"
使用 JSTL 输出要写成 <c:out value="${name}" />
但是使用 EL 只需要 ${name}
所以使用 EL 表达式非常的简单。
示例:
<c:set var="name" value="${'gareen'}" scope="request" />
通过标签获取 name: <c:out value="${name}" /> <br>
通过 EL 获取 name: ${name}
取参
EL 表达式还可以做到像 request.getParameter("name")
这样获取浏览器传递过来的参数:
${param.name}
作用域优先级
EL 表达式可以从 pageContext,request,session,application 四个作用域中取到值,如果四个作用域中都有那么属性,那么 EL 会按照从小到大的优先级顺序获取 (即优先获取出来的是 pageContext 的 name):
pageContext > request > session > application
JavaBean
EL 可以很方便的获取 JavaBean 的属性;
JavaBean 的标准:
1. 提供无参 public 的构造方法;
2. 每个属性,都有 public 的 getter 和 setter 方法;
3. 如果属性是 boolean,那么就对应 is 和 setter 方法;
获取 JavaBean的属性,只需要通过『.』符号;
如:${hero.name}
则会调用 hero 的 getName 方法;如果属性是 boolean 类型,则会调用 isXXX 方法。
当然,在 <%@ page
中需要导入此 JavaBean 所在的包。
结合 JSTL
EL 可以结合 JSTL 的 <c:forEach
使用,进一步简化代码;
原代码中的 <c:out value="${hero}" />
可以简写为 ${hero}
示例:
<%
List<String> heros = new ArrayList<String>();
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><c:out value="${st.count}" /></td>
<td><c:out value="${hero}" /></td>
<!-- 简化后 -->
<td>${st.count}</td>
<td>${hero}</td>
</tr>
</c:forEach>
</table>
eq
eq 用来进行条件判断,更加简化了 JSTL 的 c:if 和 c:choose 代码;
eq 相等 ne、neq 不相等,
gt 大于 lt 小于
not 非 mod 求模
gte、ge 大于等于
lte、le 小于等于
is [not] div by 是否能被某数整除
is [not] even 是否为偶数
is [not] odd 是否为奇数
示例:
<%
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? "超神":"还没超神" }