JSTL

jstl标签

jstl简介

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=”” prefifix=””%>

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

​ <%@taglib uri=”http://java.sun.com/jsp/jstl/fmt” prefifix=”fmt”%>

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

标签的使用
条件动作标签
if标签

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

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

没有主体内容

<!--<c:if test="条件" var="用于存储条件结果的变量" scope="var属性的作用域,默认page"> </c:if> --> <%request.setAttribute("num", "1"); %>
<c:if test="${'1==1'}" var="flag"></c:if> <!-- flase --> 
<c:if test="1==1" var="flag"></c:if> <!-- flase --> 
<c:if test="${'num==1'}" var="flag"></c:if> <!-- true --> 
<c:if test="${1==1}" var="flag"></c:if> <!-- true -->

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

有主体内容

<%
	int num = 66;
	request.setAttribute("num",66);
%>
<c:if test="${num>60&&num<=70}">
	还可以
</c:if>
<c:if test="${num>70&&num<=80}">
	可以哦
</c:if>
choose、when、otherwise

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

<%
	int num = 66;
	request.setAttribute("num",66);
%>
<c:choose>
	<c:when test="${num<=60}">
		<h1>有待加强!</h1>
	</c:when>
	<c:when test="${num<=80}">
		<h1>还阔以!</h1>
	</c:when>
	<c:otherwise>
		<h1>有点猛!</h1>
	</c:otherwise>
</c:choose>

注意:

1、choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签

2、choose中至少有一个when标签

3、choose标签和otherwise标签没有属性,when标签必须要有test属性

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

5、当所有的when标签的条件都不成立时,才执行otherwise标签中的语句

迭代标签
forEach

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

<% 
	List<User> list = new ArrayList<>();
	User user1 = new User("张三","123456",18,1);
	User user2 = new User("李四","654321",20,0);
	User user3 = new User("王五","777777",25,0);
	User user4 = new User("赵六","543387",27,1);
	list.add(user1);
	list.add(user2);
	list.add(user3);
	list.add(user4);
	request.setAttribute("list",list);
%>

<% 
	Map<String,Object> map = new HashMap<>();
	map.put("u1", user1);
	map.put("u2", user2);
	map.put("u3", user3);
	map.put("u4", user4);
	request.setAttribute("map",map);
%>

<!-- 
	var 存放现在指向的成员,(每次迭代结束会覆盖之前的成员) 
	items 被迭代的集合对象
--> 
<c:forEach var="user" items="${requestScope.list}">
	<h1>${user.username}</h1>
	<h2>${user.pwd}</h2>
	<h3>${user.age}</h3>
	<h4>
	<c:if test="${user.gender==0}">女</c:if>
	<c:if test="${user.gender==1}">男</c:if>
	</h4>
	<h4>${user.gender}</h4>
</c:forEach>
<hr>

<!-- 
	begin设置开始的位置,end设置结束的位置 step设置每次迭代的间隔数(默认为1)
	varStatus 属性的使用:用来存放现在指向的相关成员信息
	属性   类型      描述
	index number 现在指到成员的索引
	count number 总共指到成员的总数
	first boolean 现在指到的成员是否为第一个成员
	last boolean 现在指到的成员是否为最后一个成员
-->
<c:forEach var="user" items="${requestScope.map}" begin="0" end="9" varStatus="userStr">
	<h1>${user.value["username"]} ${userStr.index}</h1>
	<h2>${user.value.pwd} ${userStr.count}</h2>
	<h3>${user.value.age} ${userStr.first}</h3>
	<h4>
	<c:if test="${user.value.gender==0}">女</c:if>
	<c:if test="${user.value.gender==1}">男</c:if>
	</h4>
	<h4>${user.value.gender} ${userStr.last}</h4>
</c:forEach>
<hr>
<c:forEach var="i" begin="1" end="10" step="2">
	<h3>${i}</h3>
</c:forEach>
格式化标签

这里只介绍常用的几种属性

formatNumber

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

<!-- 无主体,值放在value属性中,有主体不需要value -->
<fmt:formatNumber value="300" type="percent"><!-- 30000% -->
</fmt:formatNumber>
<fmt:formatNumber var="i" value="300" type="percent"><!-- 30000% -->
</fmt:formatNumber>
${i}
<fmt:formatNumber value="10000" type="currency"><!-- ¥10000 默认是当前区域的货币符 -->
</fmt:formatNumber>
<fmt:formatNumber type="currency">
1000
</fmt:formatNumber>
<!-- pattern自定义模式 -->
<fmt:formatNumber value="10000"  pattern="¥"><!-- ¥10000 -->
</fmt:formatNumber>
<fmt:formatNumber value="10000"  pattern="$"><!-- $10000 -->
</fmt:formatNumber>
formatDate

使用指定的风格或模式格式化日期和时间

<!--
	value 要显示的日期
	type date, time, 或 both date是年月日 time是时分秒 both两者都包含
	dateStyle full, long, medium, short, 或 default 可以设置date
	timeStyle full, long, medium, short, 或 default 可以设置time
	pattern 自定义格式模式
	timeZone 显示日期的时区
	var 存储格式化日期的变量名
	scope 存储格式化日志变量的范围
-->
<% request.setAttribute("time",new Date()); %><!-- 2019-9-11 -->
<fmt:formatDate value="${time}"/><br>
<fmt:formatDate value="${time}" var="t"/><br><!-- 2019-9-11 -->
<h1>${t}</h1>
<fmt:formatDate value="${time}" dateStyle="full"/><br><!-- 2019年9月11日 星期三 -->
<fmt:formatDate value="${time}" type="time" timeStyle="full"/><br>
<!-- 下午09时56分19秒 CST -->
<fmt:formatDate value="${time}" type="both" /><br><!-- 2019-9-11 21:56:19 -->
<fmt:formatDate value="${time}" type="both" timeStyle="full" dateStyle="full"/><br>
<!-- 2019年9月11日 星期三 下午09时56分19秒 CST -->
<fmt:formatDate value="${time}" pattern="yyyy/MM/dd hh:mm:ss"/><br>
<!-- 2019/09/11 09:56:19 -->
parseNumber

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

<% 
	request.setAttribute("num", "$1,000.00"); 
	request.setAttribute("num1 ", "123,456.789"); 
%>
<!-- 无主体,值放在value属性中 pattern自定义解析模式 -->
<fmt:parseNumber value="Y2000" pattern="Y"></fmt:parseNumber><!-- 2000 -->
<!-- 有主体 -->
<fmt:parseNumber pattern="Y"><!-- 1000 -->
Y1000
</fmt:parseNumber>
<!-- 
	parseLocale指定解析数字时使用的区域,en_US指代美国 
	type可以为number、currency、percent
-->
<fmt:parseNumber value="${num}" type="currency" parseLocale="en_US"></fmt:parseNumber>
<fmt:parseNumber value="${num1}" type="number"></fmt:parseNumber>
parseDate

此标签为指定区域解析日期和时间的字符串表示法

<% request.setAttribute("time","14-11-18"); %>
<fmt:parseDate value="${time}" pattern="dd-MM-yy"><!-- Wed Nov 14 00:00:00 CST 2018  -->
</fmt:parseDate>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值