JSTL标签库
# 125.JSTL标签库
JSTL,全称JavaServer Pages Tag Library,译为JSP标准标签库,是由Apache组织提供的开源的免费的JSP标签,用于简化和替换 JSP 页面上的 Java 代码
# 使用步骤
我们在 JSP深入学习 里已经讲过如何使用了,这里简单回顾下:
- 导入 JSTL 相关 jar 包:jstl-impl.jar,javax.servlet.jsp.jstl.jar
- 引入标签库:在 JSP 里使用taglib指令,例如 <%@ taglib %>
- 使用JSTL标签
如果遇到报错:
无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]
可以尝试这样解决:打开IDEA的项目设置,查看2是否有lib目录,且里面有jar包,如果没有,则点击3就会生成lib目录,并会在编译的输出路径下有jar包
# 常用的JSTL标签
标签有很多,我们仅仅介绍常用的:
- if:相当于 Java 代码的 if 语句
- choose:相当于 Java 代码的 switch 语句
- foreach:相当于 Java 代码的 for 语句
# if 标签
if:相当于java代码的if语句
属性:test 是必须属性,接受boolean表达式
- 如果表达式为true,则显示 if 标签体内容,如果为false,则不显示标签体内容
- 一般情况下,test属性值会结合EL表达式一起使用
- 注意: c:if 标签没有else情况,想要else情况,则可以在定义一个c:if标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>if标签</title>
</head>
<body>
<c:if test="true">
<h1>我是真...</h1>
</c:if>
<%
//判断request域中的一个list集合是否为空,如果不为null则显示遍历集合
List list = new ArrayList();
list.add("aaaa");
request.setAttribute("list",list);
request.setAttribute("number",4);
%>
<c:if test="${not empty list}">
遍历集合...
</c:if>
<c:if test="${number % 2 != 0}"> ${number}为奇数 </c:if>
<c:if test="${number % 2 == 0}"> ${number}为偶数 </c:if>
</body>
</html>
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
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
# choose 标签
相当于java代码的switch语句
- 使用choose标签声明 相当于switch声明
- 使用when标签做判断 相当于case
- 使用otherwise标签做其他情况的声明 相当于default
我们写一个小案例:完成数字编号对应星期几的转换
- 域中存储一数字
- 使用choose标签取出数字 相当于switch声明
- 使用when标签做数字判断 相当于case
- otherwise标签做其他情况的声明 相当于default
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>choose标签</title>
</head>
<body>
<%
request.setAttribute("number",51);
%>
<c:choose>
<c:when test="${number == 1}">星期一</c:when>
<c:when test="${number == 2}">星期二</c:when>
<c:when test="${number == 3}">星期三</c:when>
<c:when test="${number == 4}">星期四</c:when>
<c:when test="${number == 5}">星期五</c:when>
<c:when test="${number == 6}">星期六</c:when>
<c:when test="${number == 7}">星期天</c:when>
<c:otherwise>数字输入有误</c:otherwise>
</c:choose>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# foreach 标签
相当于Java代码的for语句,例如我们想实现Java代码中的循环:
for(int i = 0; i < 10; i ++){
}
1
2
3
2
3
可以这样写
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
i :${i} s.index:${s.index} s.count:${s.count} <br>
</c:forEach>
1
2
3
2
3
属性说明:
begin:开始值
end:结束值
var:临时变量
step:步长
varStatus:循环状态对象
- index:容器中元素的索引,从0开始
- count:循环次数,从1开始
而如果是一个容器,Java是这样遍历的:
List<User> list;
for(User user : list){
}
1
2
3
4
2
3
4
我们可以这样写:
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>
1
2
3
2
3
完整代码:JSTLDemo3.jsp
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>foreach标签</title>
</head>
<body>
<c:forEach begin="1" end="10" var="i" step="2" varStatus="s">
i :${i} s.index:${s.index} s.count:${s.count} <br>
</c:forEach>
<hr>
<%
List list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
request.setAttribute("list",list);
%>
<c:forEach items="${list}" var="str" varStatus="s">
${s.index} ${s.count} ${str}<br>
</c:forEach>
</body>
</html>
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
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
页面显示:
i :1 s.index:1 s.count:1
i :3 s.index:3 s.count:2
i :5 s.index:5 s.count:3
i :7 s.index:7 s.count:4
i :9 s.index:9 s.count:5
0 1 aaa
1 2 bbb
2 3 ccc
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 练习
需求:在request域中有一个存有User对象的List,使用JSTL + EL 将list集合数据展示到 JSP 页面的表格table中
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Date" %>
<%@ page import="com.peterjxl.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>test</title>
</head>
<body>
<%
List list = new ArrayList<>();
list.add(new User("张三"));
list.add(new User("李四"));
list.add(new User("王五"));
request.setAttribute("list",list);
%>
<table border="1" width="500" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
</tr>
<%--数据行--%>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="red">
<td>${s.count}</td>
<td>${user.name}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="green">
<td>${s.count}</td>
<td>${user.name}</td>
</tr>
</c:if>
</c:forEach>
</table>
</body>
</html>
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
上次更新: 2024/6/19 08:28:34