JSTL

JSTL

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

核心标签库

http://java.sun.com/jsp/jstl/core

包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等

格式化标签库

http://java.sun.com/jsp/jstl/fmt

用来格式化显示数据的工作,比如:对不同区域的日期格式化等。

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

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

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

此时需要导入两个jar 包

官方下载地址:http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/

下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:

​ standard.jar 和 jstl.jar 文件拷贝到项目的指定目录下。

条件动作标签

if 标签

<c:if test="<boolean>" var="<string>" scope="<string>"> 

... 

</c:if>

属性:

属性描述是否必要默认值
test条件
var用于存储条件结果的变量(限域变量名)
scopevar属性的作用域 : 可取值:page|request|session|applictionpage

示例

<% 

	request.setAttribute("flag",true); 

	request.setAttribute("num",1); 

%>

<c:if test="${flag}"> 

	<p>结果为true<p> 

</c:if> 

<c:if test="${num > 0}"> 

	<p>num的值比0<p> 

</c:if> 

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

choose**、**when otherwise 标签

choose 和 when 标签的作用与 Java 中的 switch 和 case 关键字相似,用于在众多选项中做出选择。

属性:

​ choose标签没有属性。

​ when标签只有一个test属性。

​ otherwise标签没有属性

示例

<% 

	request.setAttribute("score", 90); 

%>

<c:choose> 

	<c:when test="${score < 60 }"> 

		<h3>不及格</h3> 

	</c:when> 

	<c:when test="${score >= 60 && score < 80 }"> 

		<h3>革命尚未成功,同志仍需努力!</h3> 

	</c:when> 

	<c:otherwise> 

		<h3>你很棒棒哦!</h3> 

	</c:otherwise> 

</c:choose> 

注意点:

​ choose标签和otherwise标签没有属性,而when标签必须设置test属性

​ choose标签中必须有至少一个when标签,可以没有otherwise标签

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

​ choose标签中只能有when标签和otherwise标签,when标签和otherwise标签可以嵌套其他标签

​ otherwise标签在所有的when标签不执行的情况下才会执行

迭代标签

forEach标签

语法格式:

<c:forEach 

		items="<object>" 

		begin="<int>" 

		end="<int>" 

		step="<int>" 

		var="<string>" 

		varStatus="<string>"> 

</c:forEach

属性:

属性描述是否必要默认值
items要被循环的数据
begin开始的元素(0=第一个元素,1=第二个元素)0
end最后一个元素(0=第一个元素,1=第二个元素)Last element
step每一次迭代的步长1
var代表当前条目的变量名称
varStatus代表循环状态的变量名称

forEach varStatus 属性

​ index: 当前这次迭代从 0 开始的迭代索引

​ count: 当前这次迭代从 1 开始的迭代计数

​ first: 用来表明当前这轮迭代是否为第一次迭代的标志

​ last: 用来表明当前这轮迭代是否为最后一次迭代的标志

示例:

1.遍历主体内容多次

<c:forEach begin="开始数" end="结束数" step="迭代数" var="限域变量名"> 

</c:forEach> 

相当于java的for循环: 

for(int i = 0; i < 10; i++) { 

}
<!-- 遍历主体内容多次 --> 

<c:forEach begin="0" end="10" var="i" > 

标题${i }<br> 

</c:forEach> 

2.循环

<c:forEach items="被循环的集合" var="限域变量名" varStatus="当前成员对象的相关信息"> 

</c:forEach> 

相当于java的foreach循环: 

for(String str : list) { 

}
<% 

	List<String> list = new ArrayList<String>(); 

	for (int i = 1; i <= 10; i++) { 

		list.add("A:" + i); 

	}

	pageContext.setAttribute("li", list); 

%>

<!-- 循环集合 --> 

<c:forEach items="${li }" var="item"> 

	${item } 

</c:forEach> 

<hr> 

<table align="center" width="800" border="1" style="border-collapse: collapse;"> 

	<tr>

		<th>名称</th> 

		<th>当前成员下标</th> 

		<th>当前成员循环数</th> 
	
		<th>是否第一次被循环</th> 

		<th>是否最后一次被循环</th> 
	
	</tr> 

	<c:forEach items="${li }" var="item" varStatus="itemp"> 

		<tr>

			<td>${item }</td> 

			<td>${itemp.index }</td> 

			<td>${itemp.count }</td> 

			<td>${itemp.first }</td> 

			<td>${itemp.last }</td> 

		</tr> 

	</c:forEach> 

</table> 

<!-- 循环对象集合 --> 

<% 

	List<User> userList = new ArrayList<User>(); 

	User user = new User(1,"zhangsan","123456"); 

	User user2 = new User(2,"lisi","123321"); 

	User user3 = new User(3,"wangwu","654321"); 

	userList.add(user); 

	userList.add(user2); 

	userList.add(user3); 

	// 将数据设置到作用域中 

	request.setAttribute("userList", userList); 

%>

<c:if test="${!empty userList }"> 

	<table align="center" width="800" border="1" style="border-collapse: collapse;"> 

		<tr>

			<th>用户编号</th> 

			<th>用户名称</th> 

			<th>用户密码</th> 

			<th>用户操作</th>

		</tr> 

		<c:forEach items="${userList }" var="user"> 

			<tr align="center"> 

				<td>${user.userId }</td> 

				<td>${user.uname }</td> 

				<td>${user.upwd }</td> 

				<td>

					<button>修改</button> 

					<button>删除</button> 

				</td> 

			</tr> 

		</c:forEach> 

	</table> 

</c:if> 

<!-- 遍历Map --> 

<% 

	Map<String,Object> map = new HashMap<String,Object>(); 

	map.put("map1", "aaa"); 

	map.put("map2", "bbb"); 

	map.put("map3", "ccc"); 

	pageContext.setAttribute("map", map); 

%>

<c:forEach items="${map }" var="mymap"> 

	键:${mymap.key }-值:${mymap.value } <br> 

</c:forEach>

formatDate标签

formatDate标签用于使用不同的方式格式化日期。(将Date型数据转换成指定格式的字符串类型。)

语法格式

	<fmt:formatDate 

		value="<string>" 

		type="<string>" 

		dateStyle="<string>" 

		timeStyle="<string>" 

		pattern="<string>" 

		timeZone="<string>" 

		var="<string>" 

		scope="<string>"/>

属性:

属性描述是否必要默认值
value要显示的日期
typeDATE, TIME, 或 BOTHdate
dataStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
timeStyleFULL, LONG, MEDIUM, SHORT, 或 DEFAULTdefault
pattern自定义格式模式
timeZone显示日期的时区默认时区
var存储格式化日期的变量名显示在页面
scope存储格式化日志变量的范围页面

示例

<% 

request.setAttribute("myDate", new Date()); 

%>

${myDate } <br/> <fmt:formatDate value="${myDate }" /><br/><fmt:formatDate value="${myDate }" type="date"/><br/><fmt:formatDate value="${myDate }" type="time"/><br/> <fmt:formatDate value="${myDate }" type="both"/><br/> <fmt:formatDate value="${myDate }" type="both" dateStyle="full"/><br/> <fmt:formatDate value="${myDate }" type="both" dateStyle="long"/><br/> <fmt:formatDate value="${myDate }" type="both" dateStyle="short"/><br/> <fmt:formatDate value="${myDate }" type="both" timeStyle="full"/><br/> <fmt:formatDate value="${myDate }" type="both" timeStyle="long"/><br/> <fmt:formatDate value="${myDate }" pattern="HH:mm yyyy/MM/dd"/><br/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值