﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-随笔分类-JSTL</title><link>http://www.blogjava.net/caizh2009/category/39895.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Tue, 06 Jul 2010 16:01:19 GMT</lastBuildDate><pubDate>Tue, 06 Jul 2010 16:01:19 GMT</pubDate><ttl>60</ttl><item><title>JSTL对Map集合的操作的问题</title><link>http://www.blogjava.net/caizh2009/archive/2010/07/05/325287.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Mon, 05 Jul 2010 07:07:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/07/05/325287.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/325287.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/07/05/325287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/325287.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/325287.html</trackback:ping><description><![CDATA[在使用&lt;c:out&nbsp;value="${map[key]}"&nbsp;/&gt;&nbsp; 求对应的KEY中的，value<br />
必须注意：key的类型必须和map中存放的key的类型一致，否则不能得到预期的结果<br />
<img src ="http://www.blogjava.net/caizh2009/aggbug/325287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-07-05 15:07 <a href="http://www.blogjava.net/caizh2009/archive/2010/07/05/325287.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL对Map集合的操作</title><link>http://www.blogjava.net/caizh2009/archive/2010/07/05/325286.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Mon, 05 Jul 2010 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/07/05/325286.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/325286.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/07/05/325286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/325286.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/325286.html</trackback:ping><description><![CDATA[<h2>1、迭代</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当forEach
的items属性中的表达式的值是java.util.Map时，则var中命名的变量的类型就是java.util.Map.Entry。这时
var=entry的话，用表达式${entry.key}取得键名。用表达式${entry.value}得到每个entry的值。这是因为
java.util.Map.Entry对象有getKey和getValue方法，表达式语言遵守JavaBean的命名约定。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 例：</p>
<div>
<div>
<div>
<div>Html代码 <embed src="http://fengzhiyin.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Cc%3AforEach%20items%3D%22%24%7Bmap%7D%22%20var%3D%22entry%22%3E%0A%20%20%20%20%20%20%20%3Cc%3Aout%20value%3D%22%24%7Bentry.key%7D%22%20%2F%3E%0A%20%20%20%20%20%20%20%20%3Cc%3Aout%20value%3D%22%24%7Bentry.value%7D%22%20%2F%3E%0A%3C%2Fc%3AforEach%3E%0A%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>&lt;c:forEach&nbsp;items="${map}"&nbsp;var="entry"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:out&nbsp;value="${entry.key}"&nbsp;/&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:out&nbsp;value="${entry.value}"&nbsp;/&gt;&nbsp;&nbsp;</li>
    <li>&lt;/c:forEach&gt;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="html">&lt;c:forEach items="${map}" var="entry"&gt;
&lt;c:out value="${entry.key}" /&gt;
&lt;c:out value="${entry.value}" /&gt;
&lt;/c:forEach&gt;
</pre>
</div>
<h2>2、根据key求值</h2>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
如果事先知道key那么很容易根据${map.key值}就可以得到值对象，但是如果key是一个变量呢？有一个问题,如果给定一个key的变量如何使用
EL得到对象呢,这里需要使用EL表达式中的[]来解决。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 例：</p>
<div>
<div>
<div>Html代码 <embed src="http://fengzhiyin.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3Cc%3Aout%20value%3D%22%24%7Bmap%5Bkey%5D%7D%22%20%2F%3E%0A%3C!--%20%E8%BF%99%E9%87%8C%E7%9A%84map%E5%B0%B1%E6%98%AF%20java.util.Map%E5%AF%B9%E5%83%8F%EF%BC%8Ckey%E6%98%AF%E8%BF%99%E4%B8%AAmap%E9%87%8C%E7%9A%84%E4%B8%80%E4%B8%AAkey%20--%3E" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>&lt;c:out&nbsp;value="${map[key]}"&nbsp;/&gt;&nbsp;&nbsp;</li>
    <li><span><span>&lt;!--&nbsp;这里的map就是&nbsp;java.util.Map对像，key是这个map里的一个
    key&nbsp;--&gt;</span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre style="display: none;" name="code" class="html">&lt;c:out value="${map[key]}" /&gt;
&lt;!-- 这里的map就是 java.util.Map对像，key是这个map里的一个key --&gt;</pre>
<div>1、迭代</div>
<div>Map的每个对象以key=value的形式给出</div>
<div>当forEach
tag的item属性中的表达式的值是java.util.Map时，在var中命名的变量被设置为类型是java.util.Map.Entry的
item。这时，迭代变量被称为entry,因此，用表达式${entry.key}取得键名。<br />
在下面的例子中你会看到，可以用表达
式${entry.value}得到每个entry的值。这是因为java.util.Map.Entry对象有getKey和getValue方法，表
达式语言遵守JavaBean的命名约定。<br />
通常，JSP
EL表达式${a.b.c.d}是用代码a.getB().getC().getD()来计算的。这种表达式是对JavaBean属性的相继调用的简化。</div>
示例:
<div>
<div>
<div>Html代码 <embed src="http://fengzhiyin.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3C%25%40%20page%20language%3D%22java%22%20pageEncoding%3D%22utf-8%22%25%3E%0A%3Cjsp%3Adirective.page%20import%3D%22com.xaccp.vo.BookAdapter%22%2F%3E%0A%3C%25%40%20taglib%20prefix%3D%22c%22%20uri%3D%22%2FWEB-INF%2Fc.tld%22%20%20%25%3E%0A%3Cjsp%3Adirective.page%20import%3D%22java.util.Hashtable%22%2F%3E%0A%3Cjsp%3Adirective.page%20import%3D%22com.xaccp.vo.Book%22%2F%3E%0A%3C!DOCTYPE%20HTML%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20HTML%204.01%20Transitional%2F%2FEN%22%3E%0A%3Chtml%3Ahtml%20locale%3D%22true%22%3E%0A%20%20%3Chead%3E%0A%20%20%20%3C%25%0A%20%20%20%20%20Hashtable%20table%3Dnew%20Hashtable()%3B%0A%20%20%20%20%20BookAdapter%20ba%3Dnew%20BookAdapter()%3B%0A%20%20%20%20%20table.put(%22aaa%22%2Cnew%20Book(1%2C%22abc%22))%3B%0A%20%20%20%20%20table.put(%22bbb%22%2Cnew%20Book(2%2C%22bbb%22))%3B%0A%20%20%20%20%20table.put(%22ccc%22%2Cnew%20Book(3%2C%22cccc%22))%3B%0A%20%20%20%20%20pageContext.setAttribute(%22table%22%2Ctable)%3B%0A%20%20%20%20%25%3E%0A%20%20%3C%2Fhead%3E%0A%20%0A%20%20%3Cbody%3E%0A%0A%20%20%20%20%3Chr%3E%0A%20%20%20%20%3Cc%3AforEach%20items%3D%22%24%7Btable%7D%22%20var%3D%22aaa%22%3E%0A%20%20%20%20%20%3Cc%3Aset%20var%3D%22key%22%20value%3D%22%24%7Baaa.key%7D%22%20%3E%3C%2Fc%3Aset%3E%0A%20%20%20%20%20%3Cc%3Aset%20var%3D%22book%22%20value%3D%22%24%7Baaa.value%7D%22%3E%3C%2Fc%3Aset%3E%0A%20%20%20%20%20%20%24%7Bkey%20%7D%3D%24%7Bbook%20%7D111%20%20name%3A%24%7Bbook.bookID%7D%3Cbr%3E%0A%0A%20%20%20%20%3C%2Fc%3AforEach%3E%0A%20%20%3C%2Fbody%3E%0A%3C%2Fhtml%3Ahtml%3E%0A%0A%20" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;pageEncoding="utf-8"%&gt;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="com.xaccp.vo.BookAdapter"/&gt;&nbsp;&nbsp;</li>
    <li>&lt;%@&nbsp;taglib&nbsp;prefix="c"&nbsp;uri="/WEB-INF/c.tld"&nbsp;&nbsp;%&gt;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="java.util.Hashtable"/&gt;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="com.xaccp.vo.Book"/&gt;&nbsp;&nbsp;</li>
    <li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;&nbsp;&nbsp;</li>
    <li>&lt;html:html&nbsp;locale="true"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;head&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;%&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable&nbsp;table=new&nbsp;Hashtable();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BookAdapter&nbsp;ba=new&nbsp;BookAdapter();&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("aaa",new&nbsp;Book(1,"abc"));&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("bbb",new&nbsp;Book(2,"bbb"));&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("ccc",new&nbsp;Book(3,"cccc"));&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageContext.setAttribute("table",table);&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;%&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/head&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;body&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;hr&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:forEach&nbsp;items="${table}"&nbsp;var="aaa"&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:set&nbsp;var="key"&nbsp;value="${aaa.key}"&nbsp;&gt;&lt;/c:set&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:set&nbsp;var="book"&nbsp;value="${aaa.value}"&gt;&lt;/c:set&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;${key&nbsp;}=${book&nbsp;}111&nbsp;&nbsp;name:${book.bookID}&lt;br&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/c:forEach&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/body&gt;&nbsp;&nbsp;</li>
    <li>&lt;/html:html&gt;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;</li>
</ol>
</div>
<pre style="display: none;" name="code" class="html">&lt;%@ page language="java" pageEncoding="utf-8"%&gt;
&lt;jsp:directive.page import="com.xaccp.vo.BookAdapter"/&gt;
&lt;%@ taglib prefix="c" uri="/WEB-INF/c.tld"  %&gt;
&lt;jsp:directive.page import="java.util.Hashtable"/&gt;
&lt;jsp:directive.page import="com.xaccp.vo.Book"/&gt;
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;
&lt;html:html locale="true"&gt;
&lt;head&gt;
&lt;%
Hashtable table=new Hashtable();
BookAdapter ba=new BookAdapter();
table.put("aaa",new Book(1,"abc"));
table.put("bbb",new Book(2,"bbb"));
table.put("ccc",new Book(3,"cccc"));
pageContext.setAttribute("table",table);
%&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;hr&gt;
&lt;c:forEach items="${table}" var="aaa"&gt;
&lt;c:set var="key" value="${aaa.key}" &gt;&lt;/c:set&gt;
&lt;c:set var="book" value="${aaa.value}"&gt;&lt;/c:set&gt;
${key }=${book }111  name:${book.bookID}&lt;br&gt;
&lt;/c:forEach&gt;
&lt;/body&gt;
&lt;/html:html&gt;
</pre>
&nbsp;2、根据key变量求值<br />
如果事先知道key那么很容易根据${map.key值}就可以得到值对象，但是如果key是一个变量呢？<br />
有一
个问题,如果给定一个key的变量如何使用EL得到对象呢,这里需要使用EL表达式中的[]来解决,解决方法如示例: <br />
<div>
<div>
<div>Html代码 <embed src="http://fengzhiyin.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=%3C%25%40%20page%20language%3D%22java%22%20pageEncoding%3D%22utf-8%22%25%3E%20%20%20%0A%3Cjsp%3Adirective.page%20import%3D%22com.xaccp.vo.BookAdapter%22%2F%3E%20%20%20%0A%3C%25%40%20taglib%20prefix%3D%22c%22%20uri%3D%22%2FWEB-INF%2Fc.tld%22%20%20%25%3E%20%20%20%0A%3Cjsp%3Adirective.page%20import%3D%22java.util.Hashtable%22%2F%3E%20%20%20%0A%3Cjsp%3Adirective.page%20import%3D%22com.xaccp.vo.Book%22%2F%3E%20%20%20%0A%3C!DOCTYPE%20HTML%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20HTML%204.01%20Transitional%2F%2FEN%22%3E%20%20%20%0A%3Chtml%3Ahtml%20locale%3D%22true%22%3E%20%20%20%0A%20%20%3Chead%3E%20%20%20%0A%20%20%20%3C%25%20%20%20%0A%20%20%20%20%20Hashtable%20table%3Dnew%20Hashtable()%3B%20%20%20%0A%20%20%20%20%20table.put(%22aaa%22%2Cnew%20Book(1%2C%22abc%22))%3B%20%20%20%0A%20%20%20%20%20table.put(%22bbb%22%2Cnew%20Book(2%2C%22bbb%22))%3B%20%20%20%0A%20%20%20%20%20table.put(%22ccc%22%2Cnew%20Book(3%2C%22cccc%22))%3B%20%20%20%0A%20%20%20%20%20pageContext.setAttribute(%22table%22%2Ctable)%3B%20%20%20%0A%20%20%20%20%25%3E%20%20%20%0A%20%20%3C%2Fhead%3E%20%20%20%0A%20%20%20%20%0A%20%20%3Cbody%3E%20%20%20%0A%20%20%20%20This%20a%20struts%20page.%20%3Cbr%3E%20%20%20%0A%20%20%20%20%3Cc%3Aset%20var%3D%22keys%22%20value%3D%22bbb%22%20%3E%3C%2Fc%3Aset%3E%20%20%20%0A%20%20%20%20%3Cc%3Aset%20var%3D%22book%22%20value%3D%22%24%7BpageScope.table%5BpageScope.keys%5D%7D%22%3E%3C%2Fc%3Aset%3E%20%20%20%0A%20%24%7Bkeys%20%7D%3D%24%7Bbook%7D%20%20%20%0A%3C!--%20%E8%BF%99%E9%87%8C%E7%9A%84%24%7Bbook%E5%B0%B1%E6%98%AF%E5%AF%B9%E5%BA%94%E4%BA%8Ekey%E5%80%BC%E5%BE%97book%E5%AF%B9%E8%B1%A1%7D%20--%3E%20%20%20%0A%20%20%20%20%3Cbr%3E%20%20%20%0A%20%20%3C%2Fbody%3E%20%20%20%0A%3C%2Fhtml%3Ahtml%3E%20%20%0A%0A" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="15" width="14"></div>
</div>
<ol start="1">
    <li>&lt;%@&nbsp;page&nbsp;language="java"&nbsp;pageEncoding="utf-8"%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="com.xaccp.vo.BookAdapter"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;%@&nbsp;taglib&nbsp;prefix="c"&nbsp;uri="/WEB-INF/c.tld"&nbsp;&nbsp;%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="java.util.Hashtable"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;jsp:directive.page&nbsp;import="com.xaccp.vo.Book"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;html:html&nbsp;locale="true"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;head&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&lt;%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hashtable&nbsp;table=new&nbsp;Hashtable();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("aaa",new&nbsp;Book(1,"abc"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("bbb",new&nbsp;Book(2,"bbb"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;table.put("ccc",new&nbsp;Book(3,"cccc"));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pageContext.setAttribute("table",table);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;%&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/head&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;body&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;a&nbsp;struts&nbsp;page.&nbsp;&lt;br&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:set&nbsp;var="keys"&nbsp;value="bbb"&nbsp;&gt;&lt;/c:set&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;c:set&nbsp;var="book"&nbsp;value="${pageScope.table[pageScope.keys]}"&gt;&lt;/c:set&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;${keys&nbsp;}=${book}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;!--&nbsp;这里的${book就是对应于key值得book对象}&nbsp;--&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&nbsp;&nbsp;&lt;br&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&nbsp;&nbsp;&lt;/body&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
    <li>&lt;/html:html&gt;&nbsp;&nbsp;&nbsp; <br />
    </li>
</ol>
</div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/325286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-07-05 15:05 <a href="http://www.blogjava.net/caizh2009/archive/2010/07/05/325286.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>&lt;c:foreach&gt;标签的使用</title><link>http://www.blogjava.net/caizh2009/archive/2010/01/08/308729.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Fri, 08 Jan 2010 07:56:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/01/08/308729.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/308729.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/01/08/308729.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/308729.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/308729.html</trackback:ping><description><![CDATA[<strong><font size="2">c:forEach标签的使用</font></strong><br />
<br />
在JSP的开发中，迭代是经常要使用到的操作。例如，逐行的显示查询的结果等。在早期的JSP中，通常使用Scriptlets来实现Iterator或者Enumeration对象的迭代输出。现在，通过JSTL的迭代标签可以在很大的程度上简化迭代操作。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JSTL所支持的迭代标签有两个，分别是c:forEach和c:forTokens。在这里介绍的是c:forEach标签。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单点说，&lt;c:forEach&gt;标签的作用就是迭代输出标签内部的内容。它既可以进行固定次数的迭代输出，也可以依据集合中对象的个数来决定迭代的次数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c:forEach标签的语法定义如下所示。<br />
<br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">varStatus</span><span>=</span><span class="attribute-value">"name"</span><span>&nbsp; &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="attribute">begin</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">end</span><span>=</span><span class="attribute-value">"expression"</span><span>&nbsp;</span><span class="attribute">step</span><span>=</span><span class="attribute-value">"expression"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;body&nbsp;content&nbsp; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span><span class="tag">&lt;/</span><span class="tag-name">c:forEach</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:forEach&gt;标签具有以下一些属性：<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var：迭代参数的名称。在迭代体中可以使用的变量的名称，用来表示每一个迭代变量。类型为String。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; items：要进行迭代的集合。对于它所支持的类型将在下面进行讲解。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; varStatus：迭代变量的名称，用来表示迭代的状态，可以访问到迭代自身的信息。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin：如果指定了items，那么迭代就从items[begin]开始进行迭代；如果没有指定items，那么就从begin开始迭代。它的类型为整数。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end：如果指定了items，那么就在items[end]结束迭代；如果没有指定items，那么就在end结束迭代。它的类型也为整数。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step：迭代的步长。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;c:forEach&gt;标签的items属性支持Java平台所提供的所有标准集合类型。此外，您可以使用该操作来迭代数组（包括基本类型数组）中的元素。它所支持的集合类型以及迭代的元素如下所示：<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Collection：调用iterator()来获得的元素。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Map：通过java.util.Map.Entry所获得的实例。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Iterator：迭代器元素。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; java.util.Enumeration：枚举元素。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Object实例数组：数组元素。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 基本类型值数组：经过包装的数组元素。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用逗号定界的String：分割后的子字符串。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; javax.servlet.jsp.jstl.sql.Result：SQL查询所获得的行。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不论是对整数还是对集合进行迭代，&lt;c:forEach&gt;的varStatus属性所起的作用相同。和var属性一样，varStatus用于创建限定了作用域的变量（改变量只在当前标签体内起作用）。不过，由varStatus属性命名的变量并不存储当前索引值或当前元素，而是赋予javax.servlet.jsp.jstl.core.LoopTagStatus类的实例。该类包含了一系列的特性，它们描述了迭代的当前状态，如下这些属性的含义如下所示：<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; current：当前这次迭代的（集合中的）项。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index：当前这次迭代从0开始的迭代索引。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count：当前这次迭代从1开始的迭代计数。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; first：用来表明当前这轮迭代是否为第一次迭代，该属性为boolean类型。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; last：用来表明当前这轮迭代是否为最后一次迭代，该属性为boolean类型。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin：begin属性的值。<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end：end属性的值<br />
<br />
l&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; step：step属性的值<br />
<br />
下面就来看一个个基本的例子，表格隔行背景色变化</div>
<div style="font-size: 12px">
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">
<ol class="dp-xml">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">c:forEach</span><span>&nbsp;</span><span class="attribute">var</span><span>=</span><span class="attribute-value">"item"</span><span>&nbsp;</span><span class="attribute">items</span><span>=</span><span class="attribute-value">"${contents}"</span><span>&nbsp;</span><span class="attribute">varStatus</span><span>=</span><span class="attribute-value">"status"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">tr</span><span>&nbsp;</span><span class="tag">&lt;</span><span class="tag-name">c:if</span><span>&nbsp;</span><span class="attribute">test</span><span>=</span><span class="attribute-value">"${status.count%2==0}"</span><span class="tag">&gt;</span><span class="attribute">bgcolor</span><span>=</span><span class="attribute-value">"#CCCCFE"</span><span class="tag">&lt;/</span><span class="tag-name">c:if</span><span class="tag">&gt;</span><span>&nbsp;</span><span class="attribute">align</span><span>=</span><span class="attribute-value">"left"</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xxx &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="tag">&lt;/</span><span class="tag-name">tr</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span> </li>
</ol>
</div>
</div>
</span></div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/308729.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-01-08 15:56 <a href="http://www.blogjava.net/caizh2009/archive/2010/01/08/308729.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>