0
点赞
收藏
分享

微信扫一扫

JSTL

慎壹 2022-03-10 阅读 63


JSP 标准标签库​,是一个定制标签 :

用途解决一些常见问题:迭代一个映射或者集合,条件测试,xml处理,数据库和数据库访问操作等

核心标签库:

http://java.sun.com/jsp/jstl/core 包含 Web 应用的常见工作, 比如:循环、表达式赋值、基本输入输出等。 

格式化标签库:

​​http://java.sun.com/jsp/jstl/fmt​​, 用来格式化显示数据的工作, 比如:对不同区域的日期格式化等

格式:

<%@taglib uri=”” prefix=””%> 

导入两个 jar 包 

 JSTL_sed


标签的使用

(一般操作域对象,变量无法操作)

条件动作标签 ​:

处理页面的输出结果依赖于某些输入值的情况,在 Java 中是利用 if、 if…else 和 switch 语句来进行处理的。在 JSTL 中也有 4 个标签 可以执行条件式动作指令:if、 choose、when 和 otherwise

1)if标签

可以利用 var 属性设置限域变量名,利用 scope 属性来指定其 作用范围,可以设置返回值,返回是boolean类型,通过var设置,


两种语法形式:

没有主体内容:

格式:<c:if test="条件" var="限域变量的名称" scope="域对象的范围[page|request|session|application]"></c:if>

有主体内容  

  格式: 

                     <c:if test="条件" var="限域变量的名称" scope="域对象的范围[page|request|session|application]">

                         条件满足时,显示的内容

                     </c:if>

注意:JSTL 中没有 else 标签,为了模拟 else 的情景,需要使用两个 if 标签,并 且这两个标签为相反的条件。 JSTL 中没有 else 标签,为了模拟 else 的情景,需要使用两个 if 标签,并 且这两个标签为相反的条件。 

<%
int a = 1;
if(a<1){
%>
<h1 style='color:blue'>q</h1>
<%
} else {
%>
<h1>w</h1>
<%
}
%>
<%
request.setAttribute("b", 10);
%>
<c:if test="${b>=10}"> <%--只能针对域对象--%>
10-
</c:if>
<c:if test="${b<10}">
0-9
</c:if>

if和域对象的判断:

<%
int a = 1;
request.setAttribute("b", 0);
request.setAttribute("c", 1);
int d = 1;
%>
<c:if test="$(1==1)" var="flag" scope="request"></c:if> ${flag }
<%--false --%>
<c:if test="${a == b}" var="flag1" ></c:if> ${flag1 } <br><%--false --%>
<c:if test="${c == b}" var="flag2" ></c:if> ${flag2 } <br><%--false --%>
<c:if test="${a == d}" var="flag3" ></c:if> ${flag3 } <br> <%--true 两个变量,找不到域对象,所以都是null才为true --%>
<c:if test="${'' == ''}" var="flag4" ></c:if> ${flag4 } <br><%--true --%>
<c:if test="${a > 0}" var="flag5" ></c:if> ${flag5 } <br><%--false a为null--%>
<c:if test="b == c" var="flag6" ></c:if> ${flag6 } <br><%--false --%>
<c:if test="1 == 1" var="flag7" ></c:if> ${flag7 } <br><%--false --%>
<c:if test="true" var="flag8" ></c:if> ${flag8 } <br><%--true --%>
<c:if test="${'1==1' }" var="flag9" ></c:if> ${flag9 } <br><%--false --%>
<c:if test="${b > 0 }" var="flag10" ></c:if> ${flag10 } <br>

choose、when 和 otherwise 标签:

choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似,。choose 标签内容部必须 嵌有一个或多个 when 标签

如果有 otherwise 标签,它必须放在最后一个 when 标签之后,否则会报错。 choose 和 otherwise 标签没有属性,设置属性报错,

 Attribute xxx invalid for tag choose according to TLD

when 标签则必须使用 test 属性设定 一个条件,用于确定是否处理主体内容

否则:attribute test is mandatory for tag when

choose标签中只能包含when标签和otherwise标签、when标签和otherwise标签可以包含其他标签

               Illegal child tag in "c:choose" tag: "c:if" tag

choose标签中至少要有一个吻痕标签,可以没有otherwise标签

                    Illegal "choose" without child "when" tag

otherwise标签必须放在最后一个when标签之后

                     Illegal "c:when" after "c:otherwise" tag in "c:choose" tag.

otherwise标签只有在所有when标签都不成立时才会执行

格式:<c:choose>

                    <c:when test="条件语句"></c:when>

                    ...

                    <c:otherwise></c:otherwise>

                </c:choose>

<%
request.setAttribute("score", 100);
%>
<c:choose>
<c:when test="${score>60 }">
<h1>分不在高,及格就好!</h1>
</c:when>
<c:otherwise>不及格</c:otherwise>
</c:choose>

forEach 标签 :

forEach 是将一个主体内容迭代多次,迭代一个对象集合。可以迭代的对象包括所 有的 java.util.Collection 和 java.util.Map 接口的实现,以及对象或 者基本类型的数组,java.util.Iterator 和 java.util.Enumeration,不能在多个动作指令中使用 Iterator 或者 Enumeration,因为 Iterator 或者 Enumeration 都不能重置

var :存放现在指到的成员

varStatus:存放现在指到的相关成员信息 

begin:开始的位置

end:结束的位置

step:每次迭代的间隔数

设置9x9表

<table border="1" style="border-collapse:collapse; "><%-- border-collapse:collapse为表格设置合并边框模型--%>
<c:forEach begin="1" end="9" var="i">
<tr>
<c:forEach begin="1" end="${i }" var="j">
<td>
${j }*${i }=${j*i }
</td>
</c:forEach>
</tr>
</c:forEach>
</table>

 迭代:将主体内容重复打印多次

格式:

<c:forEach begin="开始循环的数" end=“结束循环的数” step="循环的间隔" var="被循环到的值的域对象名称">

    主体内容

  </c:forEach>

迭代集合:

<c:forEach items="被循环的集合/对象" var ="被循环到的成员的域对象名称" varStatus="当前被循环的成员信息">

    主体内容

 </c:forEach>

<%
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
request.setAttribute("list", list);
%>
<table border="1" style="border-collapse: collapse;">
<tr>
<th>姓名</th>
<th>当前成员的下标</th>
<th>循环次数</th>
<th>当前成员是否第一次循环</th>
<th>当前成员是否最后一次循环</th>
</tr>
<c:forEach items="${list }" var="item" varStatus="info">
<tr>
<td>${item }</td>
<td>${info.index }</td>
<td>${info.count }</td>
<td>${info.first }</td>
<td>${info.last }</td>
</tr>
</c:forEach>
</table>

varStatus属性的使用​:

index :现在指到成员的索引

count:总共指到成员的总数

first:指到的成员是否为第一个成员

last:现在指到的成员是否为最后一个成员

<%
Map<String,Object> map = new HashMap<>();
map.put("a", "1");
map.put("b", "2");
map.put("c", "3");
map.put("admin",list);
request.setAttribute("myMap",map);
%>
<c:forEach items="${myMap }" var="user">
${user.key }= ${user.value }<br>
</c:forEach>

格式化动作指令 :

JSTL 提供了格式化和解析数字和日期的标签,

formatNumber、formatDate、parseNumber 及 parseDate

formatNumber 标签 :

fmatNumber 标签 该标签用指定的格式或精度来格式化数 

没有主体内容

格式:<fmt:formatNumber value="被格式化的值" var="格式化后的结果(域对象的名称)" type="被格式化的类型"></fmt:formatNumber>

type:被格式化的类型

       number:数值型

     percent:百分比类型

      currency:货币类型

     value:被格式化的值

    var:用来接收格式化后的结果的限域变量,没有设置格式化后直接输出,设置了就需通过表达式获取域对象中的值

格式化百分比,默认保留两位小数,四舍五入

                maxIntegerDigits:允许最大的整数位

                maxFractionDigits:允许最大的小数位

<fmt:formatNumber value="10" type="number"></fmt:formatNumber> <br><!-- 10 -->
<fmt:formatNumber value="10" type="number" var="num"></fmt:formatNumber>${num }<br><!--10 -->
<fmt:formatNumber value="0.235265" type="percent"></fmt:formatNumber><!--24% -->
<fmt:formatNumber value="12345.6789" type="number" maxIntegerDigits="3" maxFractionDigits="2"></fmt:formatNumber><!--345.68 -->
<fmt:formatNumber value="1000" type="currency"></fmt:formatNumber><br> <!-- ¥1,000.00 -->

formatDate格式化日期:

格式:<fmt:formatDate value="要被格式化的值" type="被格式化的类型"/>

    value:也可以用表达式从域对象中取值

     type:被格式化的类型

                date:日期类型,默认值

                time:时间类型

                both:日期+时间类型


<%
Date myDate = new Date();
request.setAttribute("myDate",myDate);
%>
${myDate }<br><%--Mon Sep 03 21:03:41 CST 2018 --%>
<fmt:formatDate value="${myDate }" type="date"/><br><%--2018-9-3 --%>
<fmt:formatDate value="${myDate }" type="time"/><br><%--21:03:41 --%>
<fmt:formatDate value="${myDate }" type="both"/><br><%--2018-9-3 21:03:41 --%>
<fmt:formatDate value="${myDate }" type="date" dateStyle="full"/><br><%-- 2018年9月3日 星期一--%>
<fmt:formatDate value="${myDate }" type="date" dateStyle="long"/><%--2018年9月3日 --%>
<fmt:formatDate value="${myDate }" type="date" dateStyle="short"/> <%-- 18-9-3--%>
<fmt:formatDate value="${myDate }" type="date" dateStyle="medium"/><br><%-- 2018-9-3--%>
<fmt:formatDate value="${myDate }" type="date" dateStyle="default"/><br><%-- 2018-9-3--%>
<fmt:formatDate value="${myDate }" type="time" dateStyle="full"/><br><%--21:11:35 --%>
<fmt:formatDate value="${myDate }" type="time" dateStyle="short"/><br><%--21:12:49 --%>
<fmt:formatDate value="${myDate }" type="both" timeZone="America/Los_Angeles"/> <%-- 市区:2018-9-3 6:14:40--%>
<fmt:formatDate value="${myDate }" pattern="yyyy-MM-dd HH:mm:ss" /><br> <%--2018-9-3 6:15:37 --%>
<fmt:formatDate value="${myDate }" pattern="yyyy/MM/dd HH:mm:ss" /><br> <%--2018/09/03 21:16:55 --%>
<fmt:formatDate value="${myDate }" pattern="yy/MM/dd" /><br><%-- 18/09/03--%>

parseNumber:

可以将数字,货币或百分比的字符出表示法解析成指定语言环境的数字,解析代表数字,货币,百分比的字符串

<fmt:parseNumber value="25%" type="percent"></fmt:parseNumber><br><%--0.25 --%>
<fmt:parseNumber value="¥100.10" type="currency" var="num"></fmt:parseNumber>${num }<br><%--100.1 --%>
<fmt:parseNumber value="${num1 }" type="number" ></fmt:parseNumber><br><%--10.1221 --%>
<fmt:parseNumber value="${num1 }" type="number" integerOnly="true"></fmt:parseNumber><br><%--10 --%>

parseDate:

将指定格式的字符串转换成日期类型

<fmt:parseDate value="2018-09-04" pattern="yyyy-MM-dd"></fmt:parseDate><br>
<fmt:parseDate value="21:35:16" pattern="HH:mm:ss"></fmt:parseDate><br>
<%
request.setAttribute("dat1", "2018/09/04");
request.setAttribute("dat2", "09/03/2018");
%>
<fmt:parseDate pattern="yyyy/MM/dd">${dat1}</fmt:parseDate>
<fmt:parseDate pattern="MM/dd/yyyy">${dat2 }</fmt:parseDate>



举报

相关推荐

09JSTL-1. JSTL简介

jstl笔记

JSTL 前言

JSP—— JSTL

JSTL标签

0 条评论