1.<c:forEach>
语法:
a、在Collection中迭代:
<c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”]
[begin=”begin”] [end=”end”] [step=”step”]>
Body 内容
</c:forEach>
b、迭代固定的次数:
<c:forEach [var=”varName”] [varStatus=”varStatusName”]
begin=”begin” end=”end” [step=”step”]>
Body 内容
</c:forEach>
下表是items支持的Collection对象类型
items 的值 | 所产生的 item 值 |
java.util.Collection | 调用 iterator() 所获得的元素 |
java.util.Map | java.util.Map.Entry 的实例 |
java.util.Iterator | 迭代器元素 |
java.util.Enumeration | 枚举元素 |
Object 实例数组 | 数组元素 |
基本类型值数组 | 经过包装的数组元素 |
用逗号定界的 String | 子字符串 |
javax.servlet.jsp.jstl.sql.Result | SQL 查询所获得的行 |
下表是varStatus的属性
特性 | Getter | 描述 |
current | getCurrent() | 当前这次迭代的(集合中的)项 |
index | getIndex() | 当前这次迭代从 0 开始的迭代索引 |
count | getCount() | 当前这次迭代从 1 开始的迭代计数 |
first | isFirst() | 用来表明当前这轮迭代是否为第一次迭代的标志 |
last | isLast() | 用来表明当前这轮迭代是否为最后一次迭代的标志 |
begin | getBegin() | begin 属性值 |
end | getEnd() | end 属性值 |
step | getStep() | step 属性值 |
说明:
a.在标签中,遍历打印元素一般有两种写法
<c:forEach var = “tuser”, items = “list”>
${tuser.name} //直接用EL表达式即可
<c:out value = “${tuser.name}”> //使用<c:out>标签打印
</c:forEach>
这两种方法在原理上是一样的。
b.关于var的疑问
我们知道EL表达式只能取jsp 4个隐藏对象的值,那么如何去这里的”tuser”呢。查看JSTL1.2源码得到var 是把这个变量定义在pageScope中,并且作用域为在<c:forEach>标签中。
2.<c:if>
语法:
1、无body的情况
<c:if test=”testCondition” var=”varName” [scope=“{page|request|session|application}”]/>
2、有body的情况
<c:if test=”testCondition” var=”varName” [scope=“{page|request|session|application}”]>
Body内容
</c:if>
3.<c:choose>
它是用于条件选择,和<c:when>,<c:otherwise>一起使用,它的条件选择是排斥性的,相当于jsp中的<%switch(i){case 0: … case 1:… default :}%>,也可以完成<%if{}…else if{}….else if{} else{} %>的功能
语法:
<c:choose>
Body内容(<c:when>,<c:otherwise>)
</c:choose>
注意:它的body内容只能是由以下的元素组成:
(1) 空格;
(2) 0个或多个<c:when>子标签,<c:when>必须在<c:otherwise>子标签之前出现;
(3) 0个或多个<c: otherwise >子标签
<c:when> 它是<c:choose>的一个分支
语法:
<c:when test=”testCondition”>
Body内容
</c:when>
注意:它有两个限制:
(1) 必须以<c:choose>作为它的父标签
(2) 必须在<c:otherwise>标签之前出现
<c:otherwise>他代表了<c:choose>的最后选择相当于jsp的<%switch(i){case 0: … case 1:… default :}%> 中的default语句。
语法:
<c:otherwise>
Conditional block
</c:otherwise>
它的使用有两个限制:
(1) 必须以<c:choose>作为它的父标签;
(2) 必须以<c:choose>的最后分支方式出现;
4.<c:out>
语法:
没有BODY的时候
<c:out value=”value” [escapeXml]=”{true|false}” [default=”defaultValue”]/>
有BODY的时候
<c:out value=”value” [escapeXml]=”{true|false}” >
这里是BODY,可以是任何合法的jsp或者是html代码。
</c:out>
注意:escapeXml的作用是是否将代码交给xml解析器解释,true为交给xml解析器解释,false为交给浏览器解释。
5.<c:set>
这个标签用于在某个范围(page,request,session,application)里面设置特定的值(默认为page),或者设置某个已经存在的javabean的属性。类似于<%request.setAttribute(“name”,value)%>
语法:
(1)使用value属性设置一个特定范围里面的属性:
<c:set value=”value” var=”varName” [scope= “{page|request|session|application}”]/ >
(2)使用value属性设置一个特定范围里面的属性,带有BODY:
<c:set value=”value” var=”varName” [scope= “{page|request|session|application}”] >
Body content
</c:set>
(3)设置某个特定对象的一个属性:
<c:set value=”value” target=”target” property=”propertyName”/ >
(4)设置某个特定对象的一个属性, 带有BODY:
<c:set value=”value” target=”target” property=”propertyName” >
Body content
</c:set>
6. <c:remove>
它的作用是删除某个变量或者属性。类似于<%session.removeAttribute(“name”)%>
语法:
<c:remove var=”varName” [scope= “{page|request|session|application}”]/ >
7. <c:catch>
它的作用是捕捉由嵌套在它里面的标签所抛出来的异常,类似于<%try{}catch{}%>语法:
<c:catch [var=”varName”]>nested actions</c:catch>
注意:
查看源码得这里的catch捕获的就是Throwable接口,并把这个捕获的异常的对象,存入varName,范围是pageScope。
8. <c:import>
导入一个url的资源,相当于jsp 中的<jsp:include page=”path”>标签,同样也可以把参数传递到被导入的页面。
语法:
a、资源的内容使用string对象向外暴露
<c:import url=”url” [context=”context”]
[var=”varName”] [scope=”{page|request|session|application}”]
[charEncoding=”charEncoding”]>
Optional body content for <c:param> subtags
</c:import>
b、资源的内容使用redirect对象向外暴露
<c:import url=”url” [context=”context”]
varReader=”varReaderName”
[charEncoding=”charEncoding”]>
Body content where varReader is consumed by another action
</c:import>
9. <c:redirect>
把客户的请求发送到另一个资源,相当于jsp中的<% request.sendRedirect(“other.jsp”)%>或者servlet中的RequestDispatch.forward(“other.jsp”)的功能。
语法:
a、没有body的情况
<c:redirect url=”value” [context=”context”]/>
b、有body,在body 中查询指定的参数
<c:redirect url=”value” [context=”context”]>
<c:param> subtags
</c:redirect>
10.<c:url>
用于构造URL,主要的用途是URL的重写。
语法:
a、没有body的情况
<c:url value=”value” [context=”context”]
[var=”varName”] [scope=”{page|request|session|application}”]/>
b、有body ,并在body 中有重写的参数
<c:url value=”value” [context=”context”]
[var=”varName”] [scope=”{page|request|session|application}”]>
<c:param />
</c:url>
11. <c:param>
它是在<c:import>,<c:redirectt>,<c:url>中添加请求的参数。和一般的参数没什么区别。
语法:
a、参数的值使用value属性指定
<c:param name=”name” value=”value”/>
b、参数的值在body 中指定
<c:param name=”name”>
参数值
</c:param>