c:if、c:set、c:foreach、c:out

一、<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.字符串判空

扫描二维码关注公众号,回复: 6201885 查看本文章
<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 属性

  •  current: 当前这次迭代的(集合中的)项
  •  index: 当前这次迭代从 0 开始的迭代索引
  •  count: 当前这次迭代从 1 开始的迭代计数
  •  first: 用来表明当前这轮迭代是否为第一次迭代的标志
  •  last: 用来表明当前这轮迭代是否为最后一次迭代的标志
  •  begin: 属性值
  •  end: 属性值
  •  step: 属性值

例如:

<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>&lt;c:out&gt; 实例</h1>
        <c:out value="&lt要显示的数据对象(未使用转义字符)&gt" escapeXml="true" default="默认值"></c:out><br/>
          <c:out value="&lt要显示的数据对象(使用转义字符)&gt" escapeXml="false" default="默认值"></c:out><br/>
    <c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>
</body>
</html>

 结果如下:

<c:out> 实例

&lt要显示的数据对象(未使用转义字符)&gt
<要显示的数据对象(使用转义字符)>
使用的表达式结果为null,则输出该默认值

猜你喜欢

转载自blog.csdn.net/Java_15707951907/article/details/89351893