一、<C:If>标签:条件判断语句
<c:if>标签判断表达式的值,如果表达式的值为 true 则执行其主体内容。
标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
test | 条件 | 是 | 无 |
var | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
test为if语句的判断条件。执行与java中的一致。
实例演示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:if 标签实例</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}">
<p>我的工资为: <c:out value="${salary}"/><p>
</c:if>
</body>
</html>
运行结果:
我的工资为: 4000
判空处理:
1.集合判空,利用关键字empty
<c:if test="${ empty list}">
//要执行的语句...
</c:if>
2.集合判空
<c:if test="${list=='[]'}">
//要执行的代码...
</c:if>
3.字符串判空
<c:if test="${query01 == null}">
//执行代码...
</c:if>
或者
<c:if test="${query01 == ''}">
//执行代码...
</c:if>
4.判断两个字符串是否相等
<c:if test="${zm.xc=='临修'}" ><td ><span class="value">L</span></td></c:if>
<c:if test="${zm.xc!='临修'}"><td ><span class="value">${zm.xc}</span></td></c:if>
二、<C:Set>标签,设置变量值
<c:set>标签用于设置变量值和对象属性。
标签属性如下:
属性 | 描述 | 是否必要 | 默认值 |
value | 要存储的值 | 否 | 主体的内容 |
target | 要修改的属性所属的对象 | 否 | 无 |
proproperty | 要修改的属性 | 否 | 无 |
var | 存储信息的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
PS: scope的作用域的大小依次是:
application > session > request > page(默认)
jsp 处理变量的作用域先后依次为:
page(默认) -> request -> session -> application
实例演示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:set 标签实例</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:out value="${salary}"/>
</body>
</html>
运行结果:
4000
<!-- 设置test变量的值为‘123’ -->
<c:set var="test" scope="session" value="123"/>
<!-- 设置today变量的值为当前日期 -->
<jsp:useBean id="now" class="java.util.Date" />
<c:set var="today">
<fmt:formatDate pattern="yyyy-MM-dd" value="${now}" />
</c:set>
注:如果value为null .则 var指定的属性将被删除
设置对象属性及map的值
<c:set target = "${studentMap}" property="name" value="Tom"/>
<c:set target = “${person}” property= 'name">
Tom
</c:set>
注:若target是一个map 则property指定的是该map的一个key ,value赋值的是该key对应的value
若target 是一个对象 则property指定的是该对象的一个属性。
若target表达式为null ,会抛出异常
若target表达式不是一个Map 或者Bean 会抛出异常
三、<C:ForEach>标签,循环取值
<c:foreach>标签用于迭代一个集合中的对象。
标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
items | 要被循环的信息 | 否 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
演示实例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:forEach 标签实例</title>
</head>
<body>
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
</body>
</html>
运行结果:
Item 1
Item 2
Item 3
Item 4
Item 5
c:forEach varStatus 属性
例如:
<c:foreach items="${sessionScope.userList}" var="userItem" begin="1" end="10" step="3" varStatus="userStatus"> XXX </c:foreach>
实例解读: 对 session 对象存储的 userList 集合对象进行遍历,每次访问的项暂时存储在 userItem 变量中,从索引 1 开始至索引 10 进行访问,但不是依次访问,每隔 3 个元素访问一次。每次访问项的状态相关值由 userStatus 对象暂存。
<c:foreach> 的 varStatus 属性暂存项的相关状态属性,可由 EL 表达式引用。
${userStatus.index} 此项的索引,从0开始
${userStatus.count} 此项的计数序号,从1开始
${userStatus.first} 此项是否是第一项,布尔值
${userStatus.last} 此项是否是最后一项,布尔值
${userStatus.begin} 此次迭代的起始索引,对应<c:foreach>中begin属性值
${userStatus.end} 此次迭代的终止索引,对应<c:foreach>中end属性值
${userStatus.step} 此次迭代的跳跃步伐,对应<c:foreach>中step属性值
演示实例:
<c:forEach items="${mdxMeasureInfoList}" var="obj">
<tr>
<td width="20%"><c:out value="${obj.measureName}"></c:out></td>
<td width="20%"><c:out value="${obj.myFildName}"></c:out></td>
<td width="20%"><c:out value="${obj.unit}"></c:out></td>
<td width="20%"><c:out value="${obj.calFormula}"></c:out></td>
</tr>
</c:forEach>
例子: C:if + C:forEach
//<c:forEach> 与 <c:if>分开使用
<table>
<tbody>
<c:forEach items="${mdxMeasureInfoList}" var="obj">
<tr>
<td width="20%"><c:out value="${obj.measureName}"></c:out></td>
<td width="20%"><c:out value="${obj.myFildName}"></c:out></td>
<td width="20%"><c:out value="${obj.unit}"></c:out></td>
<td width="20%"><c:out value="${obj.calFormula}"></c:out></td>
</tr>
</c:forEach>
<c:if test="${mdxMeasureInfoList=='[]'}">
<tr>
<td colspan="11"><font color="red">很抱歉 没有可以展示的数据!</font></td>
</tr>
</c:if>
</tbody>
</table>
//例子2:<c:forEach> 与 <c:if>嵌套使用
<table>
<tbody>
//page.content,是因为在controller中将传过来的list封装在了pagebean实体中,
//所以取值时为page.content。普通集合取值时,不用加 .content
<c:forEach items="${page.content}" var="obj">
<tr>
<td width="30px"><input name="id" type="checkbox" value="${obj.id}" /></td>
<td width="15%"><c:out value="${obj.measureName}"></c:out></td>
<td width="15%"><c:out value="${obj.myFildName}"></c:out></td>
<td width="15%"><c:out value="${obj.unit}"></c:out></td>
<td width="15%">
<c:if test="${obj.measureAggregator=='sum'}">总和</c:if>
<c:if test="${obj.measureAggregator=='count'}">计数</c:if>
<c:if test="${obj.measureAggregator=='min'}">最小值</c:if>
<c:if test="${obj.measureAggregator=='max'}">最大值</c:if>
<c:if test="${obj.measureAggregator=='avg'}">平均值</c:if>
</td>
<td width="15%">
<c:if test="${obj.ifDisplay=='0'}">显示</c:if>
<c:if test="${obj.ifDisplay!='0'}">隐藏</c:if>
</td>
</tr>
</c:forEach>
</tbody>
</table>
循环嵌套:
<%--
年级/班级/姓名 逃课数 操作
一年级 20 - -
二班 8 - -
张三1 3 - -
李四1 2 - -
王五1 3 - -
三班 5 - -
张三1 1 - -
李四1 2 - -
王五1 2 - -
七班 7 - -
张三1 5 - -
李四1 2 - -
二年级 18 - -
--%>
<c:forEach items="${gradelist}" var="grade">
<tr><td></td></tr>
<c:forEach items="${classeslist}" var="classes">
<c:if test="${grade.id == classes.grade_id }">
<tr><td></td></tr>
<c:forEach items="${studentlist}" var="student">
<c:if test="${classes.id == student.classess_id}">
<tr><td></td></tr>
</c:if>
</c:forEach>
</c:if>
</c:forEach>
</c:forEach>
大致这样
项目代码片段:
<c:set var="row_count" value="0"></c:set>
<c:forEach items="${result }" var="zm" varStatus="s">
<c:if test="${zm.xc=='lc'}" >
<c:set var="row_count" value="${row_count+1}" />
</c:if>
<tr>
<td><span class="value">${s.count }</span></td>
<td><span class="value">${zm.gdtw}</span></td>
<td ><span class="value">${zm.cxch}</span></td>
<c:if test="${zm.xc=='lc'}" ><td ><span class="value">L</span></td></c:if>
<c:if test="${zm.xc!='lc'}"><td ><span class="value">${zm.xc}</span></td</c:if>
<td ><span class="value">${zm.kzb}</span></td>
<td ><span class="value">${zm.s_zygz}</span></td>
<td ><span class="value">${fn:substring(zm.jhlc, 10, 16)}</span></td>
<td ><span class="value">${fn:substring(zm.sjlc, 10, 16)}</span></td>
<td ><span class="value"></span></td>
<td ><span class="value"></span></td>
<td ><span class="value"></span></td>
</tr>
</c:forEach>
<tr>
<td colspan="3" align="center">橡木</td>
<td colspan="2" align="center">腐朽</td>
<td colspan="1" align="center">林秀</td>
<td colspan="1" align="center">合集</td>
<td colspan="2" align="center">半日褚车</td>
<td colspan="2" align="center">餐车辆数</td>
</tr>
<tr>
<td colspan="3" align="center">计划量数</td>
<td colspan="2"></td>
<td colspan="1" align="center">${row_count}</td>
<td colspan="1" align="center">${row_count}</td>
<td colspan="2"></td>
<td colspan="2"></td>
</tr>
<tr>
<td colspan="3" align="center">实际量数</td>
<td colspan="2"></td>
<td colspan="1" align="center">${row_count}</td>
<td colspan="1" align="center">${row_count}</td>
<td colspan="2"></td>
<td colspan="2"></td>
四、<C:Out>标签,显示表达式结果
<c:out>标签用来显示一个表达式的结果,与<%= %>作用相似,它们的区别就是<c:out>标签可以直接通过"."操作符来访问属性。
举例来说,如果想要访问customer.address.street,只需要这样写:<c:out value="customer.address.street">。
<c:out>标签会自动忽略XML标记字符,所以它们不会被当做标签来处理。
标签有如下属性:
属性 | 描述 | 是否必要 | 默认值 |
value | 要输出的内容 | 是 | 无 |
default | 输出的默认值 | 否 | 主体中的内容 |
escapeXml | 是否忽略XML特殊字符 | 否 | true |
演示实例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>c:out 标签实例</title>
</head>
<body>
<h1><c:out> 实例</h1>
<c:out value="<要显示的数据对象(未使用转义字符)>" escapeXml="true" default="默认值"></c:out><br/>
<c:out value="<要显示的数据对象(使用转义字符)>" escapeXml="false" default="默认值"></c:out><br/>
<c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>
</body>
</html>
结果如下:
<c:out> 实例
<要显示的数据对象(未使用转义字符)>
<要显示的数据对象(使用转义字符)>
使用的表达式结果为null,则输出该默认值