A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2019-3-8 10:27  /  8804 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

EL表达式

EL的概述

EL(Expression Language):目的是为了是jsp写起来更加简单。

EL表达式只能获取存在4个作用域中的数据。

EL获取对于null这样的数据,在页面中表现为空字符串。

EL语法结构:${expression}
eg:

<!--JSP脚本写法-->
<%
pageContext.setAttribute("name","widsom");
String value = (String)pageContext.getAttribute("name") ;
out.print(value);
%>

<!--EL表达式写法-->

${name}


最终输出的都是:widsom
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
${name}的原理是pageContext.findAttribute(“name”);所以${}底层调用的就是pageContext.findAttribute()方法。

EL运算符

点运算符

<%
    User user = new User("widsom");
    pageContext.setAttribute("user",user);
%>


${user.name}

输出的是:widsom
1
2
3
4
5
6
7
8
9
${user.name},等价于user.getName()方法。点(.)运算符相当于调用getter(),点后面跟的是属性名。

属性导航:${user.city.name}

表示的是User对象调用getCity(),比如返回一个City对象,City对象调用getName()方法。然后输出。

[]运算符:点运算符能做的,它也可以,点不能做的,它也可以。

${user.name}等价于${user[‘name’]}或者${user[“name”]}

eg1:


<%
    List<String> list = new ArrayList();
    list.add("111111");
    list.add("222222");
    list.add("333333");
    pageContext.setAttribute("list",list);
%>

<%-- 这里我们不能采用点运算符,如:${list.1} ,而是使用[]运算符 --%>
${list[1]}

输出的是:222222
1
2
3
4
5
6
7
8
9
10
11
12
13
eg2:


<%
    Map<String,String> map = new HashMap();
    map.put("a","aaaaaa");
    map.put("b","bbbbbb");
    map.put("c","cccccc");

    pageContext.setAttribute("map",map);
%>

<!--这里的a代表的是map中的key-->
${map['a']}
${map["a"]}
${map.a}

三个输出的都是:aaaaaa


也就是说,这里点运算符和[]运算符作用是一样的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
empty运算符

判断null,空字符串和没有元素的集合,都返回true。

eg:

<%
    String str1 = null;
    pageContext.setAttribute("str1",str1);

    String str2 = "";
    pageContext.setAttribute("str2",str2);

    String str3 = "123";
    pageContext.setAttribute("str3",str3);

    List<String> list1 = new ArrayList();
    pageContext.setAttribute("list1",list1);

    List<String> list2 = new ArrayList();
    list2.add("123");
    pageContext.setAttribute("list2",list2);
%>

${empty str1}
${empty str2}
${empty str3}
${empty list1}
${empty list2}


输出的值为:
true
true
false
true
false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
三元运算符
如:
${empty list1 ? “列表没有数据” : “列表有数据”}

eg:

<%
    pageContext.setAttribute("sex", 0);
%>

<input type="radio" name="sex"  value="m"  ${sex==0 ? "checked='checked'" : "" }/>男<br/>
<input type="radio" name="sex"  value="f"  ${sex==1 ? "checked='checked'" : "" }/>女<br/>

我们切换pageContext.setAttribute()的值,刷新页面,就可以看到效果了。
1
2
3
4
5
6
7
8
EL隐式对象(11个)

如图所示:



其实这11个对象基本实现对请求消息的封装。

这里我们有几个需要注意的:

requestScope不是jsp中的request内置对象。
sessionScope不是jsp中的session内置对象。
applicationScope不是jsp中的application内置对象。

例如:我们要获取/应用名称

JSP语法:request.getContextPath();
在EL表达式:${pageContext.request.contextPath}

我们需要借助pageContext获取其他域对象调用。
1
2
3
4
5
6
JSTL

JSTL(JavaServerPages Standard Tag Library)
JSP标准标签库

JSTL的作用:使用JSTL实现JSP页面中逻辑处理。如判断、循环等。

JSTL的使用

在JSP页面添加taglib指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
1
使用JSTL标签
<!--表示if标签-->
<c:if test=""></c:if>
1
2
常用的标签介绍

核心标签库core:

通用标签

set:设置变量

<c:set var="num" value="${10+5}" scope="page"></c:set>
out:输出数据

<c:out value="${num}"></c:out><br/>
remove:移除变更

<c:remove var="num" /><br/>
条件标签

if

<c:set var="num" value="5"></c:set>

<c:if test="${num>3}">
结果为true
</c:if>

<c:if test="${num<=3}">
结果为false
</c:if>
1
2
3
4
5
6
7
8
9
10
choose:相当于Java中的switch语句

<c:set var="num" value="5" />

<c:choose>
<c:when test="${num==1}">
    num==1
</c:when>
<c:when test="${num==2}">
    num==2
</c:when>
<c:when test="${num==3}">
    num==3
</c:when>
<c:when test="${num==4}">
    num==4
</c:when>
<c:when test="${num==5}">
    num==5
</c:when>
<c:otherwise>
    num不在范围内
</c:otherwise>
</c:choose>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
迭代标签

forEach标签具有以下一些属性:

var:迭代参数的名称。在迭代体中可以使用的变量的名称,用来表示每一个迭代变量。类型为String。

items:要进行迭代的集合。对于它所支持的类型将在下面进行讲解。

varStatus:迭代变量的名称,用来表示迭代的状态,可以访问到迭代自身的信息。

begin:如果指定了items,那么迭代就从items[begin]开始进行迭代;如果没有指定items,那么就从begin开始迭代。它的类型为整数。

end:如果指定了items,那么就在items[end]结束迭代;如果没有指定items,那么就在end结束迭代。它的类型也为整数。

step:迭代的步长。

普通for循环

<c:forEach var="i" begin="0" end="10" step="1">
    ${i}
</c:forEach>
1
2
3
增强for循环

<%
    List<String> list = new ArrayList();
    list.add("111111");
    list.add("222222");
    list.add("333333");

    pageContext.setAttribute("list",list)
%>
<c:forEach items="${list}" vatStatus="str">
    ${i}
</c:forEach>
1
2
3
4
5
6
7
8
9
10
11
varStatus:
varStatus这个属性会记录着遍历的元素的一些信息:
getIndex():索引(从0开始)
getCount():数量(从1开始)
isFirst():是否是第一个元素
isLast():是否是最后一个元素
<c:forEach items="${list} var="i" varStatus="str">
    <tr>
        <td>${i}</td>
        <td>${str.index}</td>
        <td>${str.count}</td>
        <td>${str.first}</td>
        <td>${str.last}</td>
    </tr>

</c:forEach>
---------------------
【转】
作者:张行之
来源:CSDN
原文:https://blog.csdn.net/qq_33689414/article/details/60364860
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马