JavaWeb 08 JSTL

1、概念

JSP Standard Tag Library
JSP标准标签库

2、标签库的分类

c

核心标签库,还被称为c标签

fn

函数标签库,需要结合EL表达式使用。里面定义了一些对字符串的操作

fmt

格式化标签库,主要用来对日期、时间、数字等进行一些国际化的操作

标签库的使用

需要导入两个jar包:
taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar

同时需要在jsp页面中使用JSP的taglib指令标签,将标签库导入到jsp页面中

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

Tips:prefix属性是用来声明在使用标签时的开头。
例如:
prefix=”tag”。则在使用标签库中的标签时,需要:

    <tag:if test=""></tag:if>

prefix=”c”。则在使用标签库中的标签时,则需要:

    <c:if test=""></c:if>

但是一般推荐不改

3、核心标签库

set

用来向域中设置属性值

<c:set var="" value="" scope=""></c:set>

⑴ var:要设置的属性值的key
对应setAttribute(key, value)中的key

⑵ value:要设置的属性值的value

⑶ scope:要放到哪个域中
可选值:page、request、session、application
如果不写该属性,则会默认放到page域中

remove

用来移除域中的属性值

<c:remove var="" scope=""></c:remove>

⑴ var:要移除的属性值的key
对应removeAttribute(key)中的key

⑵ scope:要移除哪个域中的属性值
如果不写该属性,则默认移除4个域中匹配到的属性值

if

用来判断【单重分支】,类似于Java中的if添加判断

<c:if test=""></c:if>

test:用来接收一个boolean类型的值,当它为true时,执行标签体中的内容

choose

用来判断【多重分支】,类似于Java中的if…else if…else

 <c:choose></c:choose>

注意:
⑴ choose标签需要配合和来使用
其中是可选的,和if…else if…else中的else也是可选的,是一样的道理

⑵ when和otherwise标签不能单独使用,必须放在标签中,否则会报错:javax.servlet.jsp.JspTagException: Illegal use of <when>-style tag without <choose> as its direct parent

⑶ otherwise需要配合when标签来使用,否则报错:

org.apache.jasper.JasperException: <h3>Validation error messages from TagLibraryValidator for c in /a.jsp</h3><p>26: Illegal "choose" without child "when" tag</p>

⑷ 当when标签中有一个条件被满足,则之后其他的when标签都不会被执行。所以要注意多个when标签体的条件的顺序

forEach

用来遍历,类似于Java中的foreach【增强for循环】

指定开头和结尾遍历

<c:forEach begin="" end="" var=""></c:forEach>

① begin:设置遍历的开始,必须是大于0的整数,且要小于end的数值。可以等于0
② end:设置遍历的结束,必须是大于0的整数,且要大于being的数值
③ var:每一个遍历出来的结果都会保存到以var的值为key,每一个遍历的结果为value的属性值中,并放到page域中

注意:
⑴ begin和end缺一不可,否则在jsp页面写标签的时候就会报异常

⑵ begin和end都必须大于0,否则报错:

  JspTagException: 'begin' < 0

JspTagException: 'end' < 0

⑶ 如果being的数值小于end的数值,则会没有效果

遍历数组或集合

<c:forEach items="" var=""></c:forEach>

① items:要遍历的数组或集合对象。可以是通过EL表达式获取到的
② var:遍历到的每一个结果放到page域中时的属性值,对应的key值

Tips:可以设置begin和end两个属性,即从指定的开始下标位置到指定的结束下标位置处,遍历。下标从0开始

使用示例

<%-- 默认放到page域中 --%>
<c:set var="key" value="value"></c:set>
page域:${pageScope.key}<br />
scope域:${requestScope.key}<br />
session域:${sessionScope.key}<br />
application域:${applicationScope.key}<br /><hr />

<%-- 放到指定域中 --%>
<c:set var="key2" value="pageVal" scope="page"></c:set>
<c:set var="key2" value="reqVal" scope="request"></c:set>
<c:set var="key2" value="sessionVal" scope="session"></c:set>
<c:set var="key2" value="appVal" scope="application"></c:set>

page域:${pageScope.key2}<br />
scope域:${requestScope.key2}<br />
session域:${sessionScope.key2}<br />
application域:${applicationScope.key2}<br /><hr />

<%-- 移除所有域中匹配到的属性值 --%>
<c:remove var="key2"/>
page域:${pageScope.key2}<br />
scope域:${requestScope.key2}<br />
session域:${sessionScope.key2}<br />
application域:${applicationScope.key2}<br /><hr />

<%-- 移除指定域中匹配到的属性值 --%>
<c:set var="key3" value="val3" scope="page"></c:set>
<c:set var="key3" value="val3" scope="request"></c:set>
<c:remove var="key3" scope="page"/>
page域:${pageScope.key3}<br />
scope域:${requestScope.key3}<br /><hr />

<%-- 单重分支判断 --%>
<c:if test="${empty pageScope.key3}">
    <h1>page域中没有叫“key3”的属性值!</h1>
</c:if>

<%-- 多重分支判断 --%>
<c:choose>
    <c:when test="${param.age>40}">大于40岁</c:when>
    <c:when test="${param.age>30}">大于30岁</c:when>
    <c:when test="${param.age>20}">大于20岁</c:when>
    <c:when test="${param.age>10}">大于10岁</c:when>
    <c:otherwise>小于10岁</c:otherwise>
</c:choose><hr />

<%-- 指定起止索引 --%>
<c:forEach begin="1" end="5" var="index">
    <a href="">${index}</a>
</c:forEach><br /><br />

<%
    List<Integer> nums = new ArrayList<Integer>();
    nums.add(1);
    nums.add(2);
    nums.add(3);
    nums.add(4);
    nums.add(5);
    pageContext.setAttribute("nums", nums);
%>
<%-- 遍历指定的集合 --%>
<c:forEach items="${nums}" var="num" >
    ${num}<br />
</c:forEach><br /><br />

<%-- 指定起止索引遍历 --%>
<c:forEach begin="1" end="3" items="${nums}" var="number">
    ${number}<br />
</c:forEach>

未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值