jstl标签库

2018-08-02  本文已影响0人  咸鱼有梦想呀

一、jstl标签库

jstl是apache对EL表达式的扩展(也就是说JSTL依赖EL),JSTL是标签语言。
jstl不是JSP内置的标签,需要导包。

1.jstl四大标签库

2.导入标签库
除了JSP动作标签外,使用其他第三方的标签库都需要
a.导包
b.在使用标签的JSP页面中使用taglib指令导入标签库

导入JSTL的core标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

二、core标签库常用标签

1.out和set

举例 举例

2.remove
删除域变量

举例

3.url
路径

举例

4.if
if标签的test属性必须是一个boolean类型的值,如果test的值为true,那么执行if标签的内容,否则不执行

<c:set var="a" value="hello"/><!-- 在page域中创建名为a的变量 -->
<c:if test="${not empty a}"><!--判断a变量不为null,没有指定域,表示全域 -->
  <c:out value="${a }"/>
</c:if>

5.choose
choose标签对应Java中的if/else if/else结构。when标签的test为true时,会执行这个when的内容。当所有when标签的test都为false时,才会执行otherwise标签的内容。

<c:set var="score" value="${param.score }"/>
<c:choose>
  <c:when test="${score > 100 || score < 0}">错误的分数:${score }</c:when>
<!-- if -->
  <c:when test="${score >= 90 }">A级</c:when><!-- else if -->
  <c:when test="${score >= 80 }">B级</c:when>
  <c:when test="${score >= 70 }">C级</c:when>
  <c:when test="${score >= 60 }">D级</c:when>
  <c:otherwise>E级</c:otherwise><!-- else -->
</c:choose>

6.forEach
forEach循环标签

例如:

例1:
<c:set var="sum" value="0" /> <!-- 创建page域属性sum为0 -->
<c:forEach var="i" begin="1" end="10"> <!-- 设置循环变量i,初始值为1,遍历到10 -->
  <c:set var=*"sum" value="${sum + i}" /> <!-- 设置sum的值为sum + i --> 
</c:forEach>
<c:out  value="sum = ${sum }/>

例2:
<c:set var="sum" value="0" />
<c:forEach var="i" begin="1" end="10" step ="2"> <!-- 步长为2,默认步长为1。相当于i+=2的意思!而默认为i++ -->
  <c:set var="sum" value="${sum + i}" />
</c:forEach>
<c:out value="sum = ${sum }"/>
<%
String[] names = {"zhangSan", "liSi", "wangWu", "zhaoLiu"};
pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }"><!-- 把ns是中每一项赋给item. ns是被遍历的数组 -->
  <c:out value="name: ${item }"/><br/><!-- 打印每一项 -->
</c:forEach>

遍历List

<%
 List<String> names = new ArrayList<String>();
 names.add("zhangSan");
 names.add("liSi");
 names.add("wangWu");
 names.add("zhaoLiu");
 pageContext.setAttribute("ns", names);
%>
<c:forEach var="item" items="${ns }"> <!-- 遍历 --> 
  <c:out value="name: ${item }"/><br/>
</c:forEach>

遍历Map

<%
 Map<String,String> stu = new LinkedHashMap<String,String>();
 stu.put("number", "N_1001");
 stu.put("name", "zhangSan");
 stu.put("age", "23");
 stu.put("sex", "male");
 pageContext.setAttribute("stu", stu);
%>
<c:forEach var="item" items="${stu }"> <!-- 因为遍历的是Map,所以每一项是Entry类型 -->
  <c:out value="${item.key } : ${item.value }"/><br/> <!-- 获取Entry的key和value
 -->
</c:forEach>
<c:forEach var="item" items="${ns }" varStatus="vs"> <!-- 把循环状态赋给vs -->
  <c:if test="${vs.first }">第一行:</c:if><!-- 如果是第一行,那么${vs.first}为true -->
  <c:if test="${vs.last }">最后一行:</c:if><!-- 如果是最后一行,那么${vs.last}为true
 -->
  <c:out value="第${vs.count }行: "/><!-- 返回行数,从1开始 -->
  <c:out value="[${vs.index }]: "/><!-- 返回行数,从0开始 -->
  <c:out value="name: ${vs.current }"/><br/><!-- 当前项,与${item}相同 -->
</c:forEach>

三、fmt标签库常用标签

fmt标签库是用来格式化输出的,通常需要格式化的有时间和数字

<%@ taglib prefix=*"fmt"* uri=*"http://java.sun.com/jsp/jstl/fmt"* %>
......
<%
 Date date = new Date();
 pageContext.setAttribute("d", date);
%>
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
<!-- 按指定格式输出日期和时间 -->
<%
  double d1 = 3.5;
  double d2 = 4.4;
 pageContext.setAttribute("d1", d1);
 pageContext.setAttribute("d2", d2);
%>
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>
<!-- 必须且仅能保留两位小数,如果大于两位,那么只保留两位,并四舍五入,如果小于两位,那么使用0补足两位。-->
<fmt:formatNumber value="${d2 }" pattern="#.##"/>
<!-- 最多显示两位,如果小于两位,那么有几位保留几位,不会用0补足。大于两位,只保留两位,并四舍五入! -->
上一篇 下一篇

猜你喜欢

热点阅读