﻿<?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--随笔分类-struts</title><link>http://www.blogjava.net/leekiang/category/25860.html</link><description>MDA/MDD/TDD/DDD/DDDDDDD</description><language>zh-cn</language><lastBuildDate>Tue, 05 Jan 2010 00:47:41 GMT</lastBuildDate><pubDate>Tue, 05 Jan 2010 00:47:41 GMT</pubDate><ttl>60</ttl><item><title>Turbine 介绍</title><link>http://www.blogjava.net/leekiang/archive/2009/12/29/307581.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Mon, 28 Dec 2009 20:46:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/12/29/307581.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/307581.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/12/29/307581.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/307581.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/307581.html</trackback:ping><description><![CDATA[转自http://davidwang.javaeye.com/blog/83952(此文思路相当清晰，值得一看)<br /><br />http://jakarta.apache.org/turbine/
<br /><br />Turbine是一个提供了完善权限控制的坚实框架（Fulcrum子项目是其基石）。Turbine的个人用户不多，但不少公司用户选择
Turbine作为框架，开发一些严肃的应用（我并没有说，用其它框架开发的应用就不严肃^_^）。Portal开源项目JetSpeed建立在
Turbine上。
<br /><br />Turbine用RunData来传递输入输出数据。如同Maverick的ControllerContext，RunData是整个
Turbine框架的数据交换中心。除了request,
response等基本信息，RunData直接包括了User/ACL等权限控制相关的属性和方法，另外还包括Action Name和Target
Template Name等定位属性。
<br /><br />Module是Turbine里面除了RunData之外的又一个核心类，是Turbine框架的基本构件，Action是
Module，Screen也是Module。Turbine提供了LoginUser和LogoutUser两个Action作为整个系统的出入口。而
其余流量的权限控制则由类似于Servlet Filter机制的Pipeline控制。
<br /><br />Turbine Pipeline的编程模型和Servlet Filter一模一样：Turbine
Pipeline的Valve就相当于Servlet Filter，而ValveContext则相当于Filter
Chain。还有更相近的例子，Tomcat源代码里面也有Valve和ValueContext两个类，不仅编程模型一样，而且名字也一样。
<br /><br /><br /><br />权限控制贯穿于Turbine框架的始终。要用好Turbine，首先要通晓子项目Fulcrum 的Security部分的权限实现模型。
<br /><br />Fulcrum Security的权限实体包括四个-- User, Group, Role, Permission。
<br /><br />实体之间包含{Role，Permission}和{ Group, User, Role}两组关系。
<br /><br />{Role，Permission}是多对多的关系，一个Role可以具有各种Permission；{ Group, User, Role}之间是多对多的关系，一个Group可包含多个User，并可以给User分配不同的Role。
<br /><br />权限模型的实现同样采用Peer模式，Entity -&gt; EntityPeer, Entity -&gt; ManagerPeer。
<br /><br />Entity和EntityManger代表抽象的模型概念，而EntityPeer和ManagerPeer代表具体的实现。
<br /><br />用户可以根据模型，提供不同的实现，比如，用内存结构中实现，用数据表结构实现，与Windows
NT权限验证机制结合，与OSWorkflow的权限控制模型结合，等等。其中，用数据表结构实现，又可以选择用Torque实现，或者用
Hibernate实现。（Torque是Turbine的O/R Mapping子项目）<br />例如，Falcrum.property配置文件包含如下Security相关选项：
<br /><br /># -------------------------------------------------------------------
<br /><br />#  S E C U R I T Y  S E R V I C E
<br /><br /># -------------------------------------------------------------------
<br /><br />services.SecurityService.user.class=org.apache.fulcrum.security.impl.db.entity.TurbineUser
<br /><br />services.SecurityService.user.manager=org.apache.fulcrum.security.impl.db.DBUserManager
<br /><br />services.SecurityService.secure.passwords.algorithm=SHA
<br /><br /># -------------------------------------------------------------------
<br /><br />#  D A T A B A S E  S E R V I C E
<br /><br /># -------------------------------------------------------------------
<br /><br />services.DatabaseService.database.newapp.driver=org.gjt.mm.mysql.Driver
<br /><br />services.DatabaseService.database.newapp.url=jdbc:mysql://127.0.0.1/newapp
<br /><br />services.DatabaseService.database.newapp.username=turbine
<br /><br />services.DatabaseService.database.newapp.password=turbine
<br /><br /><br /><br />这说明，权限控制实现由数据库提供，需要根据权限模型创建如下数据表：
<br /><br />TURBINE_USER，TURBINE_ROLE，TURBINE_GROUP，
<br /><br />TURBINE_PERMISSION，TURBINE_ROLE_PERMISSION，
<br /><br />TURBINE_USER_GROUP_ROLE<br /><br />Turbine表单处理中的中文:http://dev.csdn.net/article/70476.shtm<br /><br />使用turbine的项目:<br />1)http://www.campware.org的Cream CRM<br />2)http://scarab.tigris.org/<br /><em>3)Ohioedge </em>是采用B/S架构的开源的客户管理系统。基于Jetspeed/Turbine技术<br />  http://www.ohioedge.com/<br /><br />参考资料:<br />http://turbine.apache.org/fulcrum/fulcrum-osworkflow-example<br />http://www.itpub.net/thread-306279-1-1.html<br />http://dev.csdn.net/article/19/19994.shtm<br /><img src ="http://www.blogjava.net/leekiang/aggbug/307581.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-12-29 04:46 <a href="http://www.blogjava.net/leekiang/archive/2009/12/29/307581.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>wicket笔记</title><link>http://www.blogjava.net/leekiang/archive/2009/05/23/277611.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Sat, 23 May 2009 14:12:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2009/05/23/277611.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/277611.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2009/05/23/277611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/277611.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/277611.html</trackback:ping><description><![CDATA[http://cwiki.apache.org/WICKET/acegi-and-wicket-auth-roles.html<br />http://databinder.net/site/show/overview<br /><br />和sh的整合<br />http://www.javaworld.com.tw/roller/ingramchen/entry/2006_2_17_sample_wicket_hibernate_spring_application<br /><br />http://www.nabble.com/integration-Spring-Wicket-Hibernate-problem-with-injection-bean-td19462602.html<br /><br />Enjoying Web Development with Wicket<br />http://wicketinaction.com/<br />pro wicket<br />http://www.onehippo.org/cms7/delve_into/quickstart.html<br /><br />http://www.blogjava.net/killme2008/archive/2007/05/22/119149.html<br />http://www.ibm.com/developerworks/cn/opensource/os-tapestrywicket/<br />http://www.netbeans.org/kb/60/web/quickstart-webapps-wicket_zh_CN.html<br /><br />开源项目:hippocms<br /><br />wicket+jquery  http://www.wickext.org<br /><p><a name="WiQuery_project">WiQuery results from the merge of two projects, </a><a href="http://code.google.com/p/wickext" rel="nofollow">WickeXt</a> and <a href="http://code.google.com/p/jquery4wicket/" rel="nofollow">jQuery4Wicket</a></p>http://wicketstuff.org<br /><br />http://www.javalobby.org/java/forums/t68753.html<br /><br /><a href="http://tommyjian.javaeye.com/blog/153082">为什么是Wicket？</a><br /><br />http://stuq.nl/weblog/2008-09-03/user-friendly-form-validation-with-wicket<br />http://stuq.nl/weblog/2008-06-05/wicket-how-to-write-a-reusable-modal-window-popup<br /><h2 class="title">Wicket RAD 0.6 released</h2><br /><br />其他框架<br />dorado，click，echo2，tapestry，OpenJWeb ,easyjweb ,rapid-framework,rife,trails<br />http://www.metadmin.com 权限<br /><img src ="http://www.blogjava.net/leekiang/aggbug/277611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2009-05-23 22:12 <a href="http://www.blogjava.net/leekiang/archive/2009/05/23/277611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts笔记</title><link>http://www.blogjava.net/leekiang/archive/2007/10/09/151314.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Tue, 09 Oct 2007 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/10/09/151314.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/151314.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/10/09/151314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/151314.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/151314.html</trackback:ping><description><![CDATA[1，ActionForm中setter和getter的类型必须对应。<br />   struts把post的所有参数放到一个map里，再通过beanutil的populate方法填充到ActionForm,在populate时有一些隐含逻辑，出现一些意想不到的行为，而且不同的BeanUtils版本可能还不一样。如果ActionForm的某个setter方法的参数是Long类型,而post的对应的参数的值为空，则会自动设置为0.另外ActionForm中setter和getter的类型必须对应，这个没搞明白，有空看populate()方法的源码。<br />2, 在ActionForm中many to one的one方可这样设置<br />   public String getParentid() {<br />        return son.getParent().getParentid().toString();<br />    }<br />    <br />    public void setParentid(String parentid) {<br />        if (parentid!= null &amp;&amp; !"".equals(parentid)) {<br />            son.setParent(new Parent(new Long(parentid)));<br />        }<br />    }<br />3,contextRelative<br />如果该值被设置为 true，那么路径就被认为是相对于整个 Web 应用的相对路径。<br />如果该值被设置为 false，那么路径就被认为是相对于一个模块化应用程序的这个模块的相对路径。默认为false。<br /><br />4,&lt;bean:write&gt;输入网页时必须加filter=false<br /><br />5，struts1.x可以利用spring提供的RequestUtil.populate(bean)方法自动的将请求参数封装进一个POJO<br />见http://yuanke.javaeye.com/blog/433370<br /><img src ="http://www.blogjava.net/leekiang/aggbug/151314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-10-09 11:38 <a href="http://www.blogjava.net/leekiang/archive/2007/10/09/151314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>logic标签的使用</title><link>http://www.blogjava.net/leekiang/archive/2007/09/14/145140.html</link><dc:creator>leekiang</dc:creator><author>leekiang</author><pubDate>Fri, 14 Sep 2007 07:03:00 GMT</pubDate><guid>http://www.blogjava.net/leekiang/archive/2007/09/14/145140.html</guid><wfw:comment>http://www.blogjava.net/leekiang/comments/145140.html</wfw:comment><comments>http://www.blogjava.net/leekiang/archive/2007/09/14/145140.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/leekiang/comments/commentRss/145140.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/leekiang/services/trackbacks/145140.html</trackback:ping><description><![CDATA[1,logic:empty与logic:present的区别<br />相同点:对于没有在page,request,session,application中定义或者是没有分配内存空间(null值)的变量，这两个标记处理的方法是一致的.<br />
区别:<font style="color: rgb(0, 0, 0);" color="#ff0000">空字符串""值，他们的处理就不一样了，logic:present 标记认为空字符串仍然是存在的，也就是说，只要是引用了一块内存空间的变量，logic:present 就会返回present ；而logic:empty则认为空字符串仍然为空，由此得出，在logic:empty看来，变量不仅仅要引用一块内存空间，而且该地址空间的值不能为空字符串，否则都认为该变量为空，都会返回empty<br /><br />2,logic iterate输出map<br />  </font><font style="color: rgb(0, 0, 0);" color="#ff0000">iterate标签处理map时好像只能做到以遍历的方式输出key和value，而不能指定输出某个key</font><br /><font style="color: rgb(0, 0, 0);" color="#ff0000">  以下来源:http://www.blogjava.net/msmary/articles/153560.html<br /></font><span style="font-size: 10pt; color: black; font-family: 'Courier New';"></span><span style="font-size: 10pt; color: black; font-family: 宋体;">      </span><span style="font-size: 10pt; color: black; font-family: 宋体;">标签本身不直接支持迭代输出</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">，</span><span style="font-size: 10pt; color: black; font-family: 宋体;">输出步骤</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">:</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';"><br />Map--&gt;Set--&gt;Iterator--&gt;Map.Entry--&gt;key</span><span style="font-size: 10pt; color: black; font-family: 宋体;">、</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">value</span><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        Map m = </span><strong><span style="font-size: 10pt; color: rgb(127, 0, 85); font-family: 'Courier New';">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New';"> HashMap();</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        m.put(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"name"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"yourname"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        m.put(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"pass"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"yourpass"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        request.setAttribute(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"map"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,m);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';"></span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">id</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"str" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"map" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">scope</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"request"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">      </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">bean:write </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"str" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">property</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"key"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">/&gt;&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">      </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">bean:write </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"str" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">property</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"value"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">/&gt;&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">   </span><span style="font-size: 10pt; color: rgb(191, 95, 63); font-family: 'Courier New';">&lt;%</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 'Courier New';">/**</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">          </span><span style="font-size: 10pt; color: black; font-family: 宋体;">在</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">Map</span><span style="font-size: 10pt; color: black; font-family: 宋体;">中保存多个</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">Collection</span><span style="font-size: 10pt; color: black; font-family: 宋体;">集合</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,</span><span style="font-size: 10pt; color: black; font-family: 宋体;">该如何进行了输出</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">?</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        */</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        List all = </span><strong><span style="font-size: 10pt; color: rgb(127, 0, 85); font-family: 'Courier New';">null</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New';">;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        Map m = </span><strong><span style="font-size: 10pt; color: rgb(127, 0, 85); font-family: 'Courier New';">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New';"> HashMap();</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all = </span><strong><span style="font-size: 10pt; color: rgb(127, 0, 85); font-family: 'Courier New';">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New';"> ArrayList();</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all.add(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"msdn"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all.add(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"url"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        m.put(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"name"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,all);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all = </span><strong><span style="font-size: 10pt; color: rgb(127, 0, 85); font-family: 'Courier New';">new</span></strong><span style="font-size: 10pt; color: black; font-family: 'Courier New';"> ArrayList();</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all.add(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"mole"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        all.add(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"msistri"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        m.put(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"info"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,all);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 'Courier New';">//</span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 宋体;">在一个</span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 'Courier New';">Map</span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 宋体;">中保存了多个集合</span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 'Courier New';">,</span><span style="font-size: 10pt; color: rgb(63, 127, 95); font-family: 宋体;">每个集合又包含了多个内容</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        request.setAttribute(</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"list"</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">,m);</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">    </span><span style="font-size: 10pt; color: rgb(191, 95, 63); font-family: 'Courier New';">%&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">id</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"src" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"list" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">scope</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"request" </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">      </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">bean:write </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"src" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">property</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"key"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">/&gt;&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">h2</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">id</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"ins" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"src" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">scope</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"page" </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">property</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"value"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">           </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">bean:write </span><span style="font-size: 10pt; color: rgb(127, 0, 127); font-family: 'Courier New';">name</span><span style="font-size: 10pt; color: black; font-family: 'Courier New';">=</span><span style="font-size: 10pt; color: rgb(42, 0, 255); font-family: 'Courier New';">"ins"</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">/&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">        </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p><p style="text-align: left;" align="left"><span style="font-size: 10pt; color: black; font-family: 'Courier New';">    </span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&lt;/</span><span style="font-size: 10pt; color: rgb(63, 127, 127); font-family: 'Courier New';">logic:iterate</span><span style="font-size: 10pt; color: teal; font-family: 'Courier New';">&gt;</span></p>http://www.blogjava.net/ftqiuqiu/articles/205631.html<br />http://zengbo0710.javaeye.com/blog/79405<br />http://blog.csdn.net/daryl715/archive/2007/03/12/1527098.aspx<br /><img src ="http://www.blogjava.net/leekiang/aggbug/145140.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/leekiang/" target="_blank">leekiang</a> 2007-09-14 15:03 <a href="http://www.blogjava.net/leekiang/archive/2007/09/14/145140.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>