JSP 的 EL 表达式

取值

不同版本的 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? "超神":"还没超神" }

猜你喜欢

转载自blog.csdn.net/xiao_22/article/details/80382652