JSTL

JSTL

一、主要内容

image.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 用来格式化显示数据的工作,比如:对不同区域

的日期格式化等。

三、导入JSTL类库

<%@taglib uri="路径" prefifix="前缀"%> 

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

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

image.png

四、标签的使用

4.1 条件动作标签

1) if 标签

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

没有主体内容
<!--<c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page|request|session|application"> </c:if> -->
<c:if test="${1==1}" var="flag"></c:if> <!-- true -->
<c:if test="${'num==1'}" var="flag" scope="request"></c:if> <!-- true -->
有主体内容
<!--
	<c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page"> 
		主体内容,条件为true时才执行 
	</c:if> 
-->
<%
    int score = 80;
    request.setAttribute("score", score);
%>
<c:if test="${score<60 }" >
		<h1>革命尚未成功,同志仍需努力!</h1>
</c:if>
<c:if test="${score >= 60 && score < 80 }">
    <h1>改革开放了,同志们辛苦了!</h1>
</c:if>
<c:if test="${score >= 80 }">
    <h1>步入小康,同志们棒棒哒!</h1>
</c:if>

<c:if test="${empty user }">
    <a href="login.jsp">亲,请登录</a>
</c:if>
<c:if test="${!empty user }">
    <a href="userCenter.jsp">${user.uname }</a>
</c:if>
2) choose、whenotherwise 标签

choose 、 when和otherwise 标签的作用与 Java 中的 switch 、 case 和 finally 关键字相似。

  • choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签
  • choose中至少有一个when标签
  • 如果有otherwise标签,它必须放在最后一个 when 标签之后,否则会报错。
  • choose和 otherwise标签没有属性,when标签则必须使用 test 属性设定一个条件,用于确定是否处理主体内容。
  • 当所有的when标签的条件都不成立时,才执行otherwise标签中的语句

格式

<c:choose> 
    <c:when test="<boolean>">
        ... 
    </c:when> 
    <c:when test="<boolean>">
        ... 
    </c:when>
    ... 
    ... 
    <c:otherwise>
        ... 
    </c:otherwise>
</c:choose>
<%
	request.setAttribute("score", 80);
%>
<c:choose>
    <c:when test="${score < 60 }">
        <h1>革命尚未成功,同志仍需努力!</h1>
    </c:when>
    <c:when test="${score >= 60 && score < 80 }">
        <h1>改革开放了,同志们幸苦了!</h1>
    </c:when>
    <c:when test="${score <= 59 }">
        <h1>穿透了码</h1>
    </c:when>
    <c:otherwise>
        <h1>步入小康,同志们棒棒de!</h1>
    </c:otherwise>
</c:choose>
  • 事实证明不会穿透 ,所以说每个when中默认相当于有个return

4.2 迭代标签

forEach 标签
属性描述类型是否必默认值
var用来存放现在指到的成员String
items被迭代的集合对象Arrays Collection Iterator Enumeration Map String
varStatus用来存放现在指到的相关成员信息String
begin开始的位置int0
end结束的位置int最后一个成员
step每次迭代的间隔数int1

varStatus 属性的使用:

属性类型意义
indexnumber现在指到成员的索引
countnumber总共指到成员的总数
fifirstboolean现在指到的成员是否为第一个成员
lastboolean现在指到的成员是否为最后一个成员
  • 将主体内容循环多次
<c:forEach var="每次循环的成员(限域变量)" begin="开始数" end="结束数" step="间隔数(默认 是1)" > 
    主体内容 
</c:forEach>
<c:forEach var="i" begin="1" end="8" >
    主体内容${i }
</c:forEach>
  • 迭代集合
<c:forEach var="每次循环的成员(限域变量)" items="需要迭代的集合" varStatus="循环到的成员 的相关信息"> 
    主体内容
</c:forEach>

varStatus属性:
index:现在指到成员的索引
count:总共指到成员的总数
first:现在指到的成员是否为第一个成员
last:现在指到的成员是否为最后一个成员

<%
    List<String> list = new ArrayList<String>();
    list.add("zhangsan");
    list.add("lisi");
    list.add("wangwu");
    for(String str : list){
        out.write(str+" ");
    }

    request.setAttribute("list", list);
%>

<c:forEach items="${list }" var="str" varStatus="status">
    ${str }-${status.index }-${status.count }-${status.first }-${status.last }
</c:forEach>
  • 迭代 list 对象集合
<%
    List<User> userList = new ArrayList<User>();
    User user1 = new User("zs","张三","/jstl/image/zs.jpg");
    User user2 = new User("ls","李四","/jstl/image/ls.jpg");
    User user3 = new User("ww","王五","/jstl/image/ww.jpg");
    userList.add(user1);
    userList.add(user2);
    userList.add(user3);
    request.setAttribute("userList", userList);
%>
<c:forEach var="user" items="${userList }">
    <h2>${user.uname }</h2>
    <h2>${user.nick }</h2>
    <img src="${user.head }" />
</c:forEach>
	
  • 迭代map
<%
    Map<String,Object> map = new HashMap<String,Object>();
    map.put("user1",user1);
    map.put("user2",user2);
    map.put("user3",user3);
    request.setAttribute("map", map);
%>
<c:forEach items="${map }" var="item">
    ${item.key }-${item.value }
    <h2>${item.value.nick }</h2>
    <h2>${item.value.uname }</h2>
</c:forEach>

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

4.3 格式化标签

1) formatNumber 标签

formatNumber 标签,该标签用指定的格式或精度来格式化数字, <fmt:formatNumber > 标签有如下

属性:

image.png

使用该标签时,有两种语法:

没有主体内容

<%
    request.setAttribute("num", 10000000);
	request.setAttribute("num1", 88888.66666);
%>
<fmt:formatNumber value="0.25" type="percent"></fmt:formatNumber>
<fmt:formatNumber value="${num }" type="currency" currencySymbol="$"></fmt:formatNumber>
<fmt:formatNumber value="${num1 }" maxIntegerDigits="4" maxFractionDigits="2"></fmt:formatNumber>

使用主体内容

<% request.setAttribute("num", 123456.789); %>
<fmt:formatNumber type="currency"> 
    1000000 
</fmt:formatNumber> 
<fmt:formatNumber type="number" maxIntegerDigits="4" maxFractionDigits="2"> 
    ${num } 
</fmt:formatNumber> 
<!-- ¥1,000,000.00 3,456.79 -->
2) formatDate 标签

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

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

image.pngimage.png

 <%
	request.setAttribute("date", new Date());
%>
<fmt:formatDate value="${date }" type="time"/><br><!-- 16:26:18 -->
<fmt:formatDate value="${date }" type="time" timeStyle="full"/><br/> <!-- 下午04时29分32秒 CST -->
<fmt:formatDate value="${date }" type="date"/><br><!-- 2019-9-11 -->
<fmt:formatDate value="${date }" type="both"/><!-- 2019-9-11 16:27:45 -->
<hr>
自定义格式化
<fmt:formatDate value="${date }" pattern="yyyy年M月d日-H时:m分:s秒"/>
3) parseNumber 标签

利用 parseNumber 标签可以将数字、货币或百分比的字符串表示法解析成指定语言环境的数字。

即解析一个代表着数字,货币或百分比的字符串。 <fmt:parseNumber > 标签有如下属性:

image.png

使用该标签时,有两种语法:

没有主体内容

<% 
	request.setAttribute("num", "¥1,000.00");
	request.setAttribute("num1", "123,456.789");
%>
<fmt:parseNumber value="20%" type="percent"></fmt:parseNumber> <!-- 0.2 --> <fmt:parseNumber value="${num }" type="currency"></fmt:parseNumber> <!-- 1000 --> <fmt:parseNumber value="${num1 }" type="number" var="aa"></fmt:parseNumber>
${aa }<!-- 123456.789 -->

使用主体内容

<% 
	request.setAttribute("num", "$1,000,000.00");
%>
<fmt:parseNumber type="currency" parseLocale="en_US"> 
    ${num } 
</fmt:parseNumber> <!-- 1000000 -->
4) parseDate 标签

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

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

image.png

使用该标签时,同样有两种语法:

<%
    request.setAttribute("date", "16:26:18");
    request.setAttribute("date1", "2019年份第09个月第09天 09点09分09秒09毫秒");
%>
<!--没有主体内容-->
<fmt:parseDate value="${date }" type="time"></fmt:parseDate>
<!--有主体内容-->
<fmt:parseDate pattern="yyyy年份第MM个月第dd天 HH点mm分ss秒SS毫秒">
    ${date1 }
</fmt:parseDate>

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值