学习笔记——day48(JSTL)

一、标签的使用

1.1 条件动作标签

1) if 标签

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>if标签</title>
</head>
<body>
	<pre>
		JSTL准备工作:
			1、导包  jstl.jar以及standard.jar 放到WEB-INF/lib下
			2、&lt;%@taglib uri=”核心标签库路径” prefix=”前缀”%&gt;
				前缀可以随意指定,但是一般按照约定熟成的规范来写
		c:if标签:
			格式:
			&lt;c:if test="条件" var="指定将条件结果存域对象中键的名称" scope="指定将条件结果存在哪一个域对象中,默认page|request|session|application">
				主体内容
			&lt;/c:if&gt;
			相当于
			if(条件){
				主体内容
			}
	</pre>
	<%
		int score = 80;
		request.setAttribute("score", score);
	%>
	之前的方式:
	<%
		if(score < 60){
			%>
		<h1>革命尚未成功,同志仍需努力!</h1>
			<%
		}else if(score >= 60 && score < 80){
			%>
		<h1>改革开放了,同志们幸苦了!</h1>
			<%
		}else if(score >= 80){
			%>
		<h1>步入小康,同志们棒棒哒!</h1>
			<%
		}
	%>
	JSTL的方式:
	<c:if test="${score<60 }" var="flag" scope="session">
		<h1>革命尚未成功,同志仍需努力!</h1>
	</c:if>
	pageContext:${pageScope.flag },request中:${requestScope.flag },session中:${sessionScope.flag },application中:${applicationScope.flag }
	<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>

</body>
</html>

2) choose、when 和 otherwise 标签

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>choose、when、otherwise标签</title>
</head>
<body>
	<pre>
	格式:
	&lt;c:choose&gt;
		&lt;c:when test="条件1"&gt;
			主体内容1
		&lt;/c:when&gt;
		&lt;c:when test="条件2"&gt;
			主体内容2
		&lt;/c:when&gt;
		&lt;c:otherwise&gt;
			主体内容3
		&lt;/c:otherwise&gt;
	&lt;/c:choose&gt;
	相当于:
	if(条件1){
		主体内容1
	}else if(条件2){
		主体内容2
	}else{
		主体内容3
	}
	
	注意:
	1、choose标签中只能有when和otherwise标签,when和otherwise标签中可有其他标签

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

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

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

	5、当所有的when标签的条件都不成立时,才执行otherwise标签中的语句
	</pre>
	
	<%
		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>
	
	
</body>
</html>

1.2 迭代标签

forEach 标签

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

varStatus 属性的使用:

属性类型意义
indexnumber现在指到成员的索引
countnumber总共指到成员的总数
firstboolean现在指到的成员是否为第一个成员
lastboolean现在指到的成员是否为最后一个成员
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="com.mage.po.User"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>forEach标签</title>
</head>
<body>
	<%
		for(int i = 0; i < 9; i++){
			out.write(""+i);
		}
	%>

	<!-- 将主体内容循环多次 -->
	<c:forEach var="i" begin="1" end="8" >
		主体内容${i }
	</c:forEach>
	
	
	<!-- 迭代集合 -->
	<pre>
		&lt;c:forEach items="要迭代的集合(el表达式获取域对象中的集合)" var="指定每次迭代到的成员变量" varStatus="用来存放现在指到的相关成员信息"&gt;
			主体内容  ${var指定的名称 }
		&lt;/c:forEach&gt;
		
		varStatus属性:
			index:现在指到成员的索引
			count:总共指到成员的总数
			first:现在指到的成员是否为第一个成员
			last:现在指到的成员是否为最后一个成员
	</pre>
	<%
		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);
	%>
	<hr>
	<c:forEach items="${list }" var="str" varStatus="status">
		${str }-${status.index }-${status.count }-${status.first }-${status.last }
	</c:forEach>
	
	<hr>
	
	
	<!-- 迭代对象集合 -->
	<%
		List<User> userList = new ArrayList<User>();
		User user1 = new User("wankun","万鲲","/jstl/image/wankun.jpg");
		User user2 = new User("caixukun","蔡徐坤","/jstl/image/caixukun.jpg");
		User user3 = new User("qiaobiluo","桥碧罗","/jstl/image/qiaobiluo1.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>
	
	<hr>
	<!-- 迭代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>
	
	
</body>
</html>

1.3 格式化标签

1) formatNumber 标签

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

属性描述是否必要默认值
value要显示的数字
typenumber,currency,或 percent 类型number
pattern指定一个自定义的格式化模式用与输出
currencyCode货币码(当type="currency"时)取决于默认区域
currencySymbol货币符号 (当 type="currency"时)取决于默认区域
groupingUsed是否对数字分组 (true 或 false)true
maxIntegerDigits整型数最大的位数
minIntegerDigits整型数最小的位数
maxFractionDigits小数点后最大的位数
minFractionDigits小数点后最小的位数
var存储格式化数字的变量Print to page
scopevar属性的作用域page
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>formatNumber格式化数值</title>
</head>
<body>
	<!-- 
	
		type:按照什么类型进行格式化
			number 数字
			currency 货币
			percent 百分比
		value:指定要格式化的数值,可以写字面值,还可以从域对象中获取
		var:指定格式化后的结果存到域对象中键的名称,如果有该属性则不会直接打印
		scope:  指定存储的域范围  page|request|session|application
	 -->
	 <!-- 没有主体内容,通过value指定要格式化的数值 -->
	 <%
	 	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>
	
	<!-- 有主体内容,把要格式化的数据放到两个标签内部 -->
	<fmt:formatNumber type="currency" var="num2" scope="request">
		123456.789
	</fmt:formatNumber>
	${num2 }
</body>
</html>

2) formatDate 标签

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

属性描述是否必要默认值
value要显示的日期
typedate, time, 或 bothdate
dateStylefull, long, medium, short, 或 defaultdefault
timeStylefull, long, medium, short, 或 defaultdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
var存储格式化日期的变量名显示在页面
scope存储格式化日志变量的范围页面

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

代码描述实例
G时代标志AD
y不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。2002
M月份数字。一位数的月份没有前导零。April & 04
d月中的某一天。一位数的日期没有前导零。20
h12 小时制的小时。一位数的小时数没有前导零。12
H24 小时制的小时。一位数的小时数没有前导零。0
m分钟。一位数的分钟数没有前导零。45
s秒。一位数的秒数没有前导零。52
S毫秒970
E周几Tuesday
D一年中的第几天180
F一个月中的第几个周几2 (一个月中的第二个星期三)
w一年中的第几周r27
W一个月中的第几周2
aa.m./p.m. 指示符PM
k小时(12 小时制的小时)24
K小时(24 小时制的小时)0
z时区中部标准时间
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>formatDate 格式化时间和日期</title>
</head>
<body>
	<!-- 
		value:指定要格式化的时间
		type:
			time:时:分:秒
			date:年-月-日
			both: 年-月-日 时:分:秒
		***pattern***:自定义格式化时间
	 -->
	 <%
	 	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秒"/>
</body>
</html>

3) parseNumber 标签

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

属性描述是否必要默认值
value要解析的数字Body
typenumber,currency,或 percentnumber
parseLocale解析数字时所用的区域默认区域
integerOnly是否只解析整型数(true)或浮点数(false)false
pattern自定义解析模式
timeZone要显示的日期的时区默认时区
var存储待解析数字的变量Print to page
scopevar属性的作用域page
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>解析数字、货币或百分比的字符串</title>
</head>
<body>
	<!-- 
		type:指定按照什么类型进行解析,一定要按照正确的类型,否则会报错
	 -->
	<%
		request.setAttribute("qian", "¥1,000.00");
	%>
	<fmt:parseNumber value="25%" type="percent"></fmt:parseNumber>
	<fmt:parseNumber value="${qian }" type="currency"></fmt:parseNumber>
	
	<fmt:parseNumber type="currency" parseLocale="en_US" >
		$1,000.00
	</fmt:parseNumber>
</body>
</html>

4) parseDate 标签

此标签为指定区域解析日期和时间的字符串表示法。即解析一个代表着日期或时间的字符串。
<fmt:parseDate> 标签有如下属性:

属性描述是否必要默认值
value要显示的日期
typedate, time, 或 bothdate
dateStylefull, long, medium, short, 或 defaultdefault
timeStylefull, long, medium, short, 或 defaultdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
var存储格式化日期的变量名显示在页面
scope存储格式化日志变量的范围页面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!DOCTYPE html">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>parseDate 解析日期和时间的字符串表示法</title>
</head>
<body>
	<!-- 
		type:指定按照什么类型进行解析,一定要按照正确的类型,否则会报错
		var: 指定解析后的内容存在域对象中的键的名称    键:值
		scope:指定解析后的内容存到哪个域对象中 page|request|session|application
	 -->
	<%
		request.setAttribute("date", "16:26:18");
		request.setAttribute("date1", "2012年份第12个月第12天 12点12分12秒12毫秒");
	%>
	<fmt:parseDate value="${date }" type="time"></fmt:parseDate>
	
	<fmt:parseDate pattern="yyyy年份第MM个月第dd天 HH点mm分ss秒SS毫秒">
		${date1 }
	</fmt:parseDate>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值