jstl依赖_JSTL你了解多少?|乐字节

大家好,欢迎来到乐字节小乐的Java技术分享园地

回顾上篇内容:

乐字节:JSP详解|乐字节​zhuanlan.zhihu.com
422cfdc338612ab45c7d45cd90a3e8c6.png

一、简介

Java Server Pages Standard Tag Libray(JSTL):JSP 标准标签库,是一个定制标签类库的集合,用于解决一些常见的问题,例如迭代一个映射或者集合、条件测试、XML 处理,甚至数据库和访问数据库操作等。

我们现在只讨论 JSTL 中最重要的标签,迭代集合以及格式化数字和日期几个标签。

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

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

为了在 JSP 页面使用 JSTL 类库,必须以下列格式使用 taglib 指令:

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

例如:<%@taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>

前缀可以是任意内容,遵循规范可以使团队中由不同人员编写的代码更加相似;所以,建议使用事先设计好的前缀。此时需要导入两个jar 包

64b1ec579738bd67484b6331539d1917.png

直接放入 Tomcat 的 lib 目录下即可。

二、标签的使用

1. 条件动作标签

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

1) if 标签

if 标签先对某个条件进行测试,如果该条件运算结果为 true, 则处理它的主体内容,测试结果保存在一个 Boolean 对象中,并创建一个限域变量来引用 Boolean 对象。可以利用 var 属性设置限域变量名,利用 scope 属性来指定其作用范围。

if 的语法有两种形式:没有主体内容、有主体内容

没有主体内容

53f323b7fcce5c4629e582b5d2a16899.png

该情况下:var 指定的限域变量由同一个 JSP 页面中后面的标签测试所决定。

有主体内容

4e3aa4decebf91fd194c6a2a6c0ca28f.png

主体内容为 JSP,若测试条件为 true,则处理 JSP。

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

2) choose、when 和 otherwise 标签

choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似。也就是说:他们为相互排斥的条件式执行提供相关内容。choose 标签内容部必须嵌有一个或多个 when 标签, 每个 when 标签代表可以进行运算和处理的一种情况。otherwise 标签用于默认的条件代码 块,如果所有的 when 标签的测试条件运算结果都不为 true,就会执行该代码块。如果有 otherwise 标签,它必须放在最后一个 when 标签之后,否则会报错。

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

afadd80249d20a45f2e68326432b9526.png

255287db5c4c88e9cc38ef61969a86cb.png

注意:

f43e7ef49426f751a59593bc101ff709.png

2. 迭代标签

forEach 标签

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

8f1c9bbf64ce15447a2b77ba4d2a19c9.png

varStatus 属性的使用:

bb6caeb8c00d8384784089224c4cb2cc.png

forEach 的语法有两种形式:

将 body 内容重复一定的次数:

e010033a356937c5b2d049c60972d3fe.png

83a05cb9f37b3a49162deabb2c21d3d0.png

用于迭代一个对象集合:

dbcbaf9701ad6f93083d4ddd48959804.png
<%
  List list = new ArrayList();
  for (int i = 0; i < 10; i++) {
   list.add("A:" + i);
  }
  pageContext.setAttribute("li", list);
 %>
 <table>
  <tr>
   <td>List内容</td>
   <td>当前下标</td>
   <td>成员总数</td>
   <td>是/否first成员</td>
   <td>是/否为last成员</td>
  </tr>
  <c:forEach items="${li}" var="item" begin="0" end="9" varStatus="idx">
   <tr>
    <td><b>${item}</b></td>
    <td>${idx.index}</td>
    <td>${idx.count }</td>
    <td>${idx.first }</td>
    <td>${idx.last}<br /></td>
   </tr>
  </c:forEach>
 </table>

内容主体为 JSP,对于每一次迭代,forEach 标签都会创建一个限域变量,其名称通过 var 属性设置。利用 forEach 迭代一个 Map,分别利用 key 和 value 属性引用一个 Map 键和一个 Map 值。

 <%
  Map map = new HashMap();
  map.put("map1", "shsxt");
  map.put("map2", "bjsxt");
  map.put("map3", "sxt");
  pageContext.setAttribute("map", map);
 %>
 <c:forEach items="${map}" var="myMap">
  ${myMap.key}:
  ${myMap.value}<br />
 </c:forEach>

3. 格式化动作指令

JSTL 提供了格式化和解析数字和日期的标签,我们讨论里面有:formatNumber、formatDate、parseNumber及parseDate。

1) formatNumber 标签

matNumber 标签 该标签用指定的格式或精度来格式化数字,<fmt:formatNumber>标签有如下属性: 使用该标签时,有两种语法:

没有主体内容

1a911901c0a52b7b1332e2ad890c545f.png

有主体内容

b45c7422e857772026d7765f66130b4c.png

3) formatDate 标签

使用指定的风格或模式格式化日期和时间,<fmt:formatDate>标签有如下属性:

f9292b34b581e86f127222f9743f03a8.png

pattern 属性指定更精确的处理日期:

21aa653fdad160ae29f459caac880d5f.png

4) parseNumber 标签

利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环 境的数字。即解析一个代表着数字,货币或百分比的字符串。两种语法形式:

没有主体内容

86a9ab852cfc0cfe849054343d4b87e0.png

使用主体内容

2530529269b358cede5e4c9fe8ec8555.png

<fmt:parseNumber>标签有如下属性

83edccaabb25a7d955ce2ed0f350b3f6.png

5) parseDate 标签

此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期或时间的字 符串。两种形式:

没有主体内容

33fc4e4ad3ff1e5dfb34deefb7ee4042.png

使用主体内容

d5ba5e4bf31c87e233a1a7f3d2f6280f.png

<fmt:parseDate>标签有如下属性

6c39b8509daa4bd417f81cef25c34946.png

除此之外还有许多其他标签,使用的时候查阅即可。

感谢阅读乐字节技术文章,请继续关注乐字节或添加君羊:五989六069八,更多Java技术文章奉上,下次小乐将为大家带来json的详细讲解!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值