9.
<c:forEach>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:
<c:forEach>动作将其体反复计算固定次数,或者针对一个集合中的每个元素分别计算一次体。当前元素(如果未指定集合则为当前索引)和迭代状态可以通过嵌套变量提供给体中的动作元素。
此动作接受属性表中所列的类型集合。当前元素的类型即为底层集合的类型,仅有两个例外。对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。
语法
:
语法1:基于集合元素进行迭代
<c:forEach items="collection" [var="var"] [varStatus="varStatus"]
[begin="startIndex"] [end="stopIndex"] [step="increment"]>
JSP elements
</c:forEach>
语法2:迭代固定次数
<c:forEach [var="var"] [varStatus="varStatus"]
begin="startIndex" end="stopIndex" [step="increment"]>
JSP elements
</c:forEach>
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
begin
|
开始位置
|
int
|
Y
|
Y
|
否
|
0
|
结合集合使用时的开始索引,从0计起。对于集合来说默认为0
|
end
|
结束位置
|
int
|
Y
|
Y
|
否
|
最后一个成员
|
结合集合使用时的结束索引(元素引要小于等于此结束索引),从0计起。默认为集合的最后一个元素。如果end小于begin,则根本不计算体集合,迭代即要针对此集合进行。
|
items
|
被迭代的集合对象
|
Collection,
Iterator, Enumeration,
Map,
数组
|
Y
|
Y
|
否
|
无
|
集合,迭代即要针对此集合进行。
|
step
|
步长
|
int
|
Y
|
Y
|
|
1
|
每次迭代时索引的递增值。默认为1。
|
var
|
当前项目
|
String
|
N
|
N
|
否
|
无
|
保存当前元素的嵌套变量的名字。
|
varStatus
|
循环状态
|
String
|
N
|
N
|
否
|
无
|
保存LoopTagStatus对象的嵌套变量的名字。
|
Null 和 错误处理
.假若items为null时,则表示为一空的集合对象
.假若begin大于或等于items时,则迭代不运算
注意:
varName的范围只存在<c:forEach>的本体中,如果超出了本题,则不能取得varName的值。如:
<c:forEach items="${atts}" var="item">
</c:forEach>
${item}</br>
${item}则不会显示item的内容。<c:forEach>除了支持数组之外,还有标准的J2SE的结合类型,例如:
ArrayList,List,LinkedList,Vector,Stack和Set等等;另外包括java.util.Map类的对象,例如:
HashMap,Hashtable,Properties,Provider和Attributes。
另外<c:forEach>还提供了varStatus属性,主要用来存放现在指到成员的相关信息。例如:我们写成
varStatus="s",那么就会把信息存放到名称为s的属性当中。varStatus属性还提供另外四个属性:index,
count,fist和last,它们个自的意义如下:
属性 类型 意义
index number 现在指到成员的索引
count number 总共指到成员的总和
first boolean 现在指到成员是否为第一个
last boolean 现在指到成员是否为最后一个
|
实例
:
----------------------------------------------------------------------------------------------------------------------------------------
Example1
<
%@page
contentType="text/html;charset=gb2312"%>
<
%@taglib
prefix="c" uri="
http://java.sun.com/jsp/jstl/core"%
>
<%
String atts[] = new String[5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="girl";
request.setAttritue("atts",atts);
%>
<c:forEach items="${atts}" var="item" varStatus="s">
<h2><c:out value="${item}"/>的四种属性></h2>
index: ${s.index}</br>
count: ${s.count}</br>
first: ${s.first}</br>
last: ${s.last}</br>
</c:forEach>
----------------------------------------------------------------------------------------------------------------------------------------
Example2
综合实例
<
select
>
<
c:forEach
items
=
"
${model.options}
"
var
=
"forum"
>
<
c:choose
>
<
c:when
test
=
"
${forum.id == model.forumId}
"
>
<
option
value
=
"
${forum.id}
"
elected
>
${forum.name}
</
option
>
</
c:when
>
<
c:otherwise
>
<
option
value
=
"
${forum.id}
"
>
${forum.name}
</
option
>
</
c:otherwise
>
</
c:choose
>
</
c:forEach
>
</
select
>
|
Example3
奇偶行样式
<c:forEach items="${model.page.list}" var="observer" varStatus="loop">
<
tr class="row$(loop.count%2)">
<td>迭代observer</td>
<td>迭代observer</td>
...
</tr>
</c:forEach>
|
Example4
分页条1
<
c:set
var
=
"page"
value
=
"
${model.page}
"
></
c:set
>
<
table
width
=
"800"
align
=
"center"
cellpadding
=
"0"
cellspacing
=
"0"
>
<
tr
class
=
"even"
>
<
td
height
=
"20"
align
=
"center"
colspan
=
"3"
valign
=
"top"
>
<
a
href
=
"javascript:page(1)"
class
=
"gr_pages"
>
首页
</
a
>
<
c:if
test
=
"
${page.currentPage > 1}
"
>
<
a
href
=
"
javascript:page(
<
c:out
value
=
"
${page.currentPage -1 }
"
/>
)
"
class
=
"gr_pages"
>
上页
</
a
>
</
c:if
>
<
c:if
test
=
"
${page.currentPage < page.totalPage}
"
>
<
a
href
=
"
javascript:page(
<
c:out
value
=
"
${page.currentPage +1 }
"
/>
)
"
class
=
"gr_pages"
>
下页
</
a
>
</
c:if
>
<
a
href
=
"
javascript:page(
<
c:out
value
=
"
${page.totalPage}
"
default
=
"1"
/>
)
"
class
=
"gr_pages"
>
末页
</
a
>
当前第
<
c:out
value
=
"
${page.currentPage}
"
/>
/
<
c:out
value
=
"
${page.totalPage}
"
/>
页
</
td
>
</
tr
>
</
table
>
|
Example5
分页条2
<
div
align
=
"center"
><
span
class
=
"all_font12"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=1&subareaCode=
${param.subareaCode}
"
class
=
"gr_pages"
>
首页
</
a
>
<
c:if
test
=
"
${page.currentPage > 1 }
"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage - 1}
&subareaCode=
${param.subareaCode}
"
class
=
"gr_pages"
>
前页
</
a
>
</
c:if
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage}
&subareaCode=
${param.subareaCode}
"
>
<
c:out
value
=
"
${page.currentPage}
"
/></
a
>
<
c:if
test
=
"
${page.currentPage + 1 <= page.totalPage}
"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage + 1}
&subareaCode=
${param.subareaCode}
"
><
c:out
value
=
"
${page.currentPage + 1}
"
/></
a
>
</
c:if
>
<
c:if
test
=
"
${page.currentPage + 2 <= page.totalPage}
"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage + 2}
&subareaCode=
${param.subareaCode}
"
><
c:out
value
=
"
${page.currentPage + 2}
"
/></
a
>
</
c:if
>
<
c:if
test
=
"
${page.currentPage + 3 <= page.totalPage}
"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage + 3}
&subareaCode=
${param.subareaCode}
"
><
c:out
value
=
"
${page.currentPage + 3}
"
/></
a
>
</
c:if
>
<
c:if
test
=
"
${page.currentPage <page.totalPage}
"
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.currentPage + 1}
&subareaCode=
${param.subareaCode}
"
class
=
"gr_pages"
>
后页
</
a
>
</
c:if
>
<
a
href
=
"
jsp/vote/voteAreaService.do?method=listVote¤tPage=
${page.totalPage}
&subareaCode=
${param.subareaCode}
"
class
=
"gr_pages"
>
末页
</
a
>
<
a
>
当前第
<
c:out
value
=
"
${page.currentPage}
"
/>
/
<
c:out
value
=
"
${page.totalPage}
"
/>
页
</
a
></
span
></
div
>
|
Example6
综合实例
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
Map map = new HashMap();
map.put("a", "12345");
map.put("b", "abcde");
out.println(map.get("a"));
request.setAttribute("map",map);
%>
<!--
完全迭代
-->
<c:forEach items="${map}" var="mymap" >
<c:out value="${mymap.key}" />
<c:out value="${mymap.value}" />
</c:forEach>
<!-- 根据map的key来找到特定的值 -->
<c:forEach items="${map}" var="mymap">
<c:if test="${mymap.key=='a'}">
<c:out value="${mymap.value}"/>
</c:if>
</c:forEach>
|
10.
<c:forTokens>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:
标签可以根据某个分隔符分隔指定字符串,相当于 java.util.StringTokenizer
类。
语法
:
<c:forTokens items="stringFoTokens" delims="delimmmmiters" [var="varName"]
[varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
...body内容....
</c:forTokens>
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
var
|
变量名
|
String
|
false
|
Y
|
否
|
无
|
用来存放现在指到的成员
|
items
|
被迭代的字符串
|
String
|
true
|
Y
|
是
|
无
|
被迭代的字符串
|
delims
|
分隔符
|
String
|
true
|
N
|
是
|
无
|
定义用来分割字符串的字符
|
varStatus
|
循环状态变量
|
String
|
false
|
N
|
否
|
无
|
用来存放现在指到的相关成员信息
|
begin
|
开始条件
|
int
|
true
|
Y
|
否
|
0
|
开始的位置
|
end
|
结束条件
|
int
|
true
|
Y
|
否
|
最后一个成员
|
结束的位置
|
step
|
步长
|
int
|
true
|
Y
|
否
|
1
|
每次迭代步长
|
限制:
.假若有begin属性时,begin必须大于等于0
.假若有end属性时,必须大于begin
.假若有step属性时,step必须大于等于1
Null 和 错误处理
.假如itmes为null时,则表示为有空的集合对象
.假若begin大于等于items的大小时,则迭代不运算
实例
:
<c:forToken items="A,B,C,D,E,F,G" delims="," var="item>
${item}
</c:forToken>
items属性也可以用EL,例如:
<%
String phonenumber="123-456-7899";
request.setAttribute("userPhone",phonenumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item">
${item}
</c:forTokens>
11.
<c:import>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:
标签允许包含另一个 JSP
页面到本页面来。jsp有两种内置机制可以将来自不同 URL 的内容合并到一个 JSP 页面:include 伪指令和 <jsp:include> 操作。不过,不管是哪种机制,要包含的内容都必须属于与页面本身相同的 Web 应用程序(或 servlet 上下文)。两个标记之间的主要区别在于: include 伪指令在页面编译期间合并被包含的内容,而 <jsp:include> 操作却在请求处理 JSP 页面时进行。
core 库的 <c:import>和 <jsp:include> 一样, <c:import> 也是一种请求时操作,它的基本任务就是将其它一些 Web 资源的内容插入 JSP 页面中。 通过 url 属性指定将要导入内容的 URL,这个属性是 <c:import> 的唯一一个必选属性。这里允许使用相对 URL,并且根据当前页面的 URL 来解析这个相对 URL。但是,如果 url 属性的值以斜杠开始,那么它就被解释成本地 JSP 容器内的绝对 URL。如果没有为 context 属性指定值,那么就认为这样的绝对 URL 引用当前 servlet 上下文内的资源。如果通过 context 属性显式地指定了上下文,那么就根据指定的 servlet 上下文解析绝对(本地)URL。 但 <c:import> 操作并不仅仅限于访问本地内容。也可以将包含协议和主机名的完整 URI 指定为 url 属性的值。实际上,协议甚至不仅局限于 HTTP。 <c:import> 的 url 属性值可以使用 java.net.URL 类所支持的任何协议。
语法
:
语法1:资源的内容使用String对象向外暴露
<c:import url="url" [context="context"]
[var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
内容
</c:import>
语法2:资源的内容使用Reader对象向外暴露。
<c:import url="url" [context="context"]
varReader="varReaderName" [charEncoding="charEncoding"]>
内容
</c:import>
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
url
|
统一资源定位器
|
String
|
true
|
Y
|
是
|
无
|
待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源
|
context
|
上下文
|
String
|
true
|
Y
|
否
|
无
|
当使用相对路径访问外部context资源时,context指定了这个资源的名字。
|
var
|
变量
|
String
|
false
|
N
|
否
|
无
|
参数的名字。
|
scope
|
范围
|
String
|
false
|
N
|
否
|
page
|
var参数的作用范围。
|
cahrEncoding
|
字符编码
|
String
|
true
|
Y
|
否
|
无
|
输入资源的字符编码。
|
varReader
|
资源
阅读器
|
String
|
false
|
N
|
否
|
无
|
这个参数的类型是Reader,用于读取资源。
|
说明
<c:import>中必须要有 url 属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址.
<c:import>也支持FTP协议,假设现在有一个 FTP站台,地址为 ftp.javaworld.com.tw,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:
<c:import url="ftp://ftp.cse.yzu.edu.tw/data.txt" />
另外,可以在<c:import>的本体内容中使用<c:param>,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value.如:
<c:import url="http://java.sun.com" >
<c:param name="test" value="1234" />
</c:import>
这样的做法等于是包含一个文件,并且所指定的网址会变成如下:
http://java.sun.com?test=1234
实例
:
----------------------------------------------------------------------------------------------------------------------------------------
Example1
<c:catch var="exception">
<c:import url="ftp://ftp.example.com/package/README"/>
</c:catch>
<c:if test="${not empty exception}">
Sorry, the remote content is not currently available.
</c:if>
<c:import> 操作用来包含通过 FTP 协议访问的文档内容。此外,还使用了 <c:catch> 操作,以便在本地处理 FTP 文件传送期间可能发生的任何错误。错误处理是这样实现的:使用 <c:catch> 的 var 属性为异常指定一个限定了作用域的变量,然后使用 <c:if> 检查其值。如果产生了异常,那么就会对那个限定了作用域的变量进行赋值:如清单 18 中的 EL 表达式所显示的那样,该变量的值将 不会为空。由于 FTP 文档的检索将会失败,因此会显示有关这种情况的错误消息。<c:import> 操作的最后两个(可选的)属性是 var 和 scope 。 var 属性会导致从指定 URL 获取的内容(作为 String 值)被存储在一个限定了作用域的变量中,而不是包含在当前 JSP 页面中。 scope 属性控制该变量的作用域,缺省情况下是页面作用域。如同我们在今后的文章中将要看到的那样,JSTL xml 库中的标记利用了 <c:import> 这种能力,即将整个文档存储在一个限定了作用域的变量中。
还要注意的是,可以使用(可选的)嵌套的 <c:param> 标记来为正在导入的 URL 指定请求参数。与在 <c:url> 中嵌套 <c:param> 标记一样,必要时也要对参数名称和参数值进行 URL 编码。
----------------------------------------------------------------------------------------------------------------------------------------
Example2
<c:import url="/MyHtml.html" var="thisPage" />
<c:import url="/MyHtml.html" context=”/sample2” var="thisPage"/>
<c:import url="www.sample.com/MyHtml.html" var="thisPage"/>
该示例演示了三种不同的导入方法,第一种是在同一 Context 下的导入,第二种是在不同的 Context 下导入,第三种是导入任意一个 URL 。
---------------------------------------------------------------------------------------------------------------------------------------
12.
<c:url>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:
主要用来产生一个URL。
语法
:
语法1:没有本体内容
<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"] >
<c:param> 标签
</c:url>
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
value
|
|
String
|
true
|
Y
|
是
|
无
|
执行的URL
|
context
|
|
String
|
true
|
Y
|
否
|
无
|
相同Container下,其他web站台必须以“/”开头
|
var
|
|
String
|
false
|
N
|
否
|
无
|
储存被包含文件的内容(以String 类型存入)
|
scope
|
|
String
|
false
|
N
|
否
|
page
|
var变量的JSP范围
|
实例
:
<c:url value="http://www.javafan.net " >
<c:param name="param" value="value"/>
</c:url>
上面执行结果将会产生一个网址为http://www.javafan.net?param=value,我们更可以搭配 HTML 的<a>使用,如下:
<a href="
<c:url value="http://www.javafan.net " >
<c:param name="param" value="value"/>
</c:url>">Java爱好者</a>
如果<c:url>有 var属性时,则网址会被存到 varName中,而不会直接输出网址。
13.
<c:redirect>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:
可以将客户端的请求从一个 JSP 网页导向到其他文件。
语法
:
语法1:没有本体内容
<c:redirect url="url" [context="context"] />
语法2:本体内容代表查询字符串(Query String)参数
<c:redirect url="url" [context="context"] >
<c:param>
</c:redirect >
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
url
|
统一资源定位器
|
String
|
true
|
Y
|
是
|
无
|
导向的目标地址,它可以是相对或绝对地址。
|
context
|
上下文
|
String
|
true
|
Y
|
否
|
无
|
相同Container下,其他web站台必须以“/”开头
|
实例
:
<c:redirect> 的功能不止可以导向网页,同样它还可以传递参数给目标文件。如:
<c:redirect url="http://java.sun.com">
<c:param name="param" value="value"/>
</c:redirect>
14.
<c:param>
库
:Core(核心库)
URI
:
http://java.sun.com/jsp/jstl/core
前缀
:
c
描述
:用于传递参数,用来为包含或重定向的页面传递参数。
语法
:
属性
:
属性名
|
描述
|
类型
|
是否接受动态值
|
是否支持
EL
|
是否
必须
|
默认值
|
说明
|
name
|
参数名
|
String
|
true
|
Y
|
是
|
无
|
传递的参数名
|
value
|
参数值
|
String
|
true
|
Y
|
否
|
无
|
传递的参数值(可选)
|
实例
:
<c:redirect url="/MyHtml.jsp">
<c:param name="userName" value=”RW” />
</c:redirect>
该示例将为重定向的“MyHtml.jsp”传递指定参数“userName=’RW’”。