JSTL(JavaServer Pages Tag Library)
一、概念
JSTL(JavaServer Pages Tag Library),JSP标准标签库,是由Apache组织提供的开源jsp标签,可以用来简化和替换jsp页面的java代码。
二、使用步骤
- 导入jstl相关的jar包
- 引入标签库:taglib指令
- 使用标签
三、常用标签
-
if:相当于java代码的if语句
-
有一个必须的属性:test,用来接收boolean表示式,如果表达式为true显示标签体内容,false不显示
-
一般test的属性值配合el表达式
<% List list = new ArrayList(); list.add("aaa"); request.setAttribute("list",list); request.setAttribute("number", 4); %> <c:if test="true">我是if,真</c:if> <c:if test="${not empty list}">遍历集合</c:if> <c:if test="${number mod 2 == 0}">${number}偶数</c:if> <c:if test="${number mod 2 != 0}">${number}奇数</c:if>
-
-
choose:相当于java代码的switch语句
- 使用choose标签声明
- 使用when标签判断
- 使用otherwise标签声明其他情况,相当于default
<% request.setAttribute("number", 13); %> <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>
-
foreach:相当于java代码的for循环语句
-
完成重复性的操作:
<c:forEach begin="1" end="10" var="i" step="1"> ${i} </c:forEach>
-
遍历容器:
属性:
- items:容易对象
- var:容器中元素的临时变量
- varStatus:循环状态变量,有index属性(索引,从0开始)、count属性(循环次数,从1开始)
<% List<String> 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>
-
四、jstl的使用
<%
// 创建一个list,并将该list加入request域
List list = new ArrayList();
list.add(new User("猪八戒", 556, new Date()));
list.add(new User("孙悟空", 36, new Date()));
list.add(new User("西海龙王", 6, new Date()));
list.add(new User("巨无霸", 536, new Date()));
list.add(new User("鲨鱼辣椒", 56, new Date()));
request.setAttribute("list", list);
%>
// 动态创建表格
<table border="1px" align="center">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="user" varStatus="s">
<c:if test="${s.count % 2 == 0}">
<tr bgcolor="#ffc0cb">// 隔行颜色不一样
<td>${s.count}</td>// 依次取出属性
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birthStr}</td>
</tr>
</c:if>
<c:if test="${s.count % 2 != 0}">
<tr bgcolor="#7fffd4">
<td>${s.count}</td>
<td>${user.name}</td>
<td>${user.age}</td>
<td>${user.birthStr}</td>
</tr>
</c:if>
</c:forEach>
</table>