﻿<?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-隔叶黄莺 The Blog of Unmi-随笔分类-Struts</title><link>http://www.blogjava.net/Unmi/category/29520.html</link><description>〖隔叶黄莺三四声，挂壁飞瀑千万尘。若是人间无净土，此处为何妙语真！ 隔叶黄莺四字，本非取自此句，而有寄寓他意，因见妙语，亦与予心合!〗</description><language>zh-cn</language><lastBuildDate>Sat, 17 May 2008 15:17:03 GMT</lastBuildDate><pubDate>Sat, 17 May 2008 15:17:03 GMT</pubDate><ttl>60</ttl><item><title>手工处理 Struts2 框架上传的文件</title><link>http://www.blogjava.net/Unmi/archive/2008/05/15/200686.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Thu, 15 May 2008 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/05/15/200686.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/200686.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/05/15/200686.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/200686.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/200686.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在使用了 Struts2 框架的系统中，对于处理像下面这种表单上传文件时：<br><br>自然而然的想法就是在 Action 中声明变量 File upload 和 String desc，请求提交到这个 Action 后，在 execute() 方法中就能直接使用 upload 和 desc 了，它们已被 Struts2 框架(org.apache.struts2.interceptor.FileUploadInterceptor 监听器) 赋上了相应的值了。<br><br>因为维护的是一个古老的项目，请求都是直接提交给 jsp。在这个项目中套上了 Struts2 已是不易了。原来项目是用的 jspSmartUpload 来处理上传文件的，Struts2 一上 jspSmartUpload 便不能正常工作了，因为 Struts2 的过滤器 org.apache.struts2.dispatcher.FilterDispatcher 拦截的是所有的请求,在交把请求交给 jspSmartUpload 之前请求 request 就已被处理过了，即使是把 struts2-core-2&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/05/15/200686.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/200686.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-05-15 17:16 <a href="http://www.blogjava.net/Unmi/archive/2008/05/15/200686.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(十二) </title><link>http://www.blogjava.net/Unmi/archive/2008/05/10/197721.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Sat, 10 May 2008 03:59:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/05/10/197721.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/197721.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/05/10/197721.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/197721.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/197721.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 上有所好，下必甚之。君不见屠宰场的墙头“以三个代表指导我们的屠宰工作!” 发挥到极致；近来更是“和谐”泛滥，褒贬难分，诸如“创建人水和谐” 等比比皆是。程序开发更需要务实，任凭天花乱坠都糊弄不了梗直的机器。<br><br>1. 初见 Struts2 的表单标签有 tooltip 以及 tooltipConfig 下的 tooltipBgColor 等属性，有一种砰然心动的感，本能的以为例如一个输入框，鼠标悬停其中便出现一个 JS Tip 层，还可控制这个层的样式。用了才知道头脑其实有点过热，不过是在输入框前加下图标，鼠标要放在那个图标上才显示 tooltip 指定的内容，而且如果不给 form 加上 tooltipConfig="#{'jsTooltipEnabled':'true'}"，也就用 alt/title 来实现，没什么新意。加了tooltipConfig="#{'jsTooltipEnabled':'true'}" 的话还要人命的是 JS 提示层会出来，alt/title 也会迸出来，产生重叠。同时还必须加上 <s:head/> 否则出现 dojo 的错误，即使 jsT&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/05/10/197721.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/197721.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-05-10 11:59 <a href="http://www.blogjava.net/Unmi/archive/2008/05/10/197721.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为何我的 Struts2 标签 tooltip 和 tooltipConfig 是这种效果呢？</title><link>http://www.blogjava.net/Unmi/archive/2008/05/05/198602.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Mon, 05 May 2008 15:59:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/05/05/198602.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/198602.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/05/05/198602.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/198602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/198602.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我的环境是 Tomcat 5.0.28 + Struts2.0.6 (web.xml 配置的是支持 Servlet 2.4)，testTooltip.jsp 页面里用了 tooltip 和 tooltipConfig 属性。<br><br>打开浏览器，浏览那页面时鼠标移到输入框前面那个图标上稍呆会儿的效果有些意外：<br><br>1) 出现一个 JS 的提示层，在下方，然后又出现一个图片的 alt/title 属性的提示。两种提示产生了重叠，十分难看。<br>2) 我明明设置了 tooltipConfig="#{'tooltipFontColor':'#ff0000'}"，JS 的提示层文字应为红色，可不是那么回事。<br><br>初见 Struts2 的 Tooltip ，对它抱过很大的期望。曾以为它可以实现鼠标悬停在输入框上时用层提示，可不尽然。只是在输入框前面多出一个 Tip 图标，鼠标放上去倒也会出现一个提示层，倒也罢，可偏偏那个图片的 alt/title 奈不住寂寞的跳了出来。&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/05/05/198602.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/198602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-05-05 23:59 <a href="http://www.blogjava.net/Unmi/archive/2008/05/05/198602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(十一) </title><link>http://www.blogjava.net/Unmi/archive/2008/04/29/196973.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Mon, 28 Apr 2008 16:46:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/04/29/196973.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/196973.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/04/29/196973.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/196973.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/196973.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 你尽可以做个良民，为群体效率而本份的遵循个人秩序，然而事与愿违，非但不能因此提升群体的效率，而你势必失去诸多的机会，不会有人褒奖你，更得不到同情，只得自觉的天真。<br><br>1. 模板目录－＞主题目录－＞主题(模板文件) 这是模板/主题的目录组织方式。以实际为例，打开 struts2-core-2.x.x.jar 可以看到里面有一个 template，在 template 下有5个目录 ajax、css_xhtml、simple、xhtml 和 archive，其中前四个分别是 ajax、css_xhtml、simple、xhtml 主题的目录，每个主题目录中有各自的模板文件，主要是 ftl 文件，还有 css 和 js 文件。最后一个 archive 是归档的主题目录，其下又有 ajax、simple、xhtml、模板文件是 .vm 文件。由此可知 Struts2 大力推荐的模板语言是 FreeMarker，而不是 Velocity，以后要好好看看 FreeMarker，只知道 FreeMarkder 更 XML 化。<br><br>2. 上面看到模板目录名是 templ&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/04/29/196973.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/196973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-04-29 00:46 <a href="http://www.blogjava.net/Unmi/archive/2008/04/29/196973.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(十) </title><link>http://www.blogjava.net/Unmi/archive/2008/04/25/195757.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Thu, 24 Apr 2008 16:24:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/04/25/195757.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/195757.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/04/25/195757.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/195757.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/195757.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 有一日，帮外公翻腾出他箱底的照片进行数字化留存，已是耄耋之年的外公端详起那些记忆来，看到都是一同革命的热情小伙，不时感慨：唉！好多人都不在啦！<br><br>1. <s:action .../> 可以用来在 JSP 页面直接调用 Action，用 name 指定 Action，executeResult(默认为 false) 指定是否包含那个 Action 转向视图的内容；executeResult 会把视图的所有内容输出在标签位置。ignoreContextParams(默认为 false)，是否将本页的请求参数传到那个 Action。<br><br>2. <s:bean .../> 用来实例化 JavaBean，标签内使用 <s:param name="" value=""/> 来指定属性。在标签内，bean 实例位于 ValueStack 顶端，标签结束则自动清除。如果指定的 id 属性，还会把该实例放到 Stack Context 中。name 属性必须，指定 Bean 类的全限名称。不知道复杂的属性该如何用 <s:param .../> 或其他方式来指定。&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/04/25/195757.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/195757.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-04-25 00:24 <a href="http://www.blogjava.net/Unmi/archive/2008/04/25/195757.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(九)</title><link>http://www.blogjava.net/Unmi/archive/2008/04/14/192464.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Mon, 14 Apr 2008 15:24:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/04/14/192464.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/192464.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/04/14/192464.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/192464.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/192464.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 中世纪的欧洲《礼仪书》中说：痰不要吐到桌子上，也不要飞过桌子。1774年，欧洲的《礼仪与基督教礼貌守则》中说：我们再也不能原谅那些把痰吐到窗户外、墙上或者家具上的人。可见，欧洲人的素质也是在他们工业化富了之后的事。至少那个时候，我们的老祖宗再不争气，也绝不会把痰吐到桌子上。<br><br>1. OGNL 中有生成 List 和 Map 的表达式，分别是：{e1,e2,e3,...} 和 #{key1:val1,key2:val2,...}。对集合 OGNL 提供了两个操作符 in 和 not in，如：<br>   <s:if test="'foo' in {'foo','bar'}" ... </s:if>            ---- not in 的用法当然是一样的了。<br>之外，OGNL 还允许通过某个规则取集合的子集<br>    ·? ：取出所有符合条件逻辑的元素<br>    ·^：取出符合条件的第一个元素<br>    ·$：取出符合条件的最后一个元素<br>请将上面这三个符号与正则表达式的表示法联系起来&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/04/14/192464.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/192464.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-04-14 23:24 <a href="http://www.blogjava.net/Unmi/archive/2008/04/14/192464.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>运行《Struts2 权威指南》 s-if.jsp 的异常引出对 EL 和 OGNL 的思考</title><link>http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Sun, 13 Apr 2008 06:06:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/192541.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/192541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/192541.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在 Tomcat 5.0.28 下运行一个 Struts2 应用，其中使用了 EL 表达式，执行后却发现总也得不到期望的结果。于是百般找寻，终于发现是 web.xml 中用的声明是：<br><br><!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" <br>    "http://java.sun.com/dtd/web-app_2_3.dtd"><br><br>而不是 Servlet 2.4 的声明，致少不能支持 EL，编译出来的 JSP 对应 Java 源代码也有不同。本篇就此进行深入分析，对比不同 web.xml 配置时，以及在分别使用 EL 和 OGNL 时产生的不同的编译结果。<br><br>最后得出结论，若想在 Servlet 2.3/JSP 1.2、JDK 为 1.4 的情况下用 Struts2 的第二条准则是：EL 换成 OGNL 表达式。在这种环境下使用 Struts2 虽说是何苦，但对于许多未能及时升级应用服务器的用户来说也是无奈之举。&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/192541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-04-13 14:06 <a href="http://www.blogjava.net/Unmi/archive/2008/04/13/192541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(八) </title><link>http://www.blogjava.net/Unmi/archive/2008/04/11/189623.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Thu, 10 Apr 2008 18:32:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/04/11/189623.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/189623.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/04/11/189623.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/189623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/189623.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 吾同人数进寺庙，却从未点过一柱香。概因精神世界里终无所寄托。既不为生儿还是女而筹算，也无须因落下亏心事要请得神灵庇佑。想来，真要的东西，阿弥陀佛也给不了。在物价飞涨之际，谁能给你加薪，何来民主，看看这辈子能不能有机会参与选一回国家领导人，少说几句了，就这点言论自由了。<br><br>1. Struts 2 标签库以 OGNL 表达式为基础，对集合、对象的访问功能更强了。Struts 2 的标签用统一的前缀，一般为 "s"，不再像 Struts1 那样分 html、bean、logic 等多个命名空间的标签。如果在 JSP 2.0 之前用过 JSTL，也就知道什么是 OGNL 表达式的。<br><br>2. Struts2 提供了很多 Struts1 标签没有的东西，如日历、树型控件、Tab页等；同时可借助 DWR，有标签支持 Ajax，除此还提供了主题、模板，还允许在页面中使用自定义组件&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/04/11/189623.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/189623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-04-11 02:32 <a href="http://www.blogjava.net/Unmi/archive/2008/04/11/189623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(七) </title><link>http://www.blogjava.net/Unmi/archive/2008/03/30/189502.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Sat, 29 Mar 2008 19:52:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/03/30/189502.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/189502.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/03/30/189502.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/189502.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/189502.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 小时候，大人们的谆谆教诲：做人要诚实。并真以此为做人原则。长大后才知道何谓社会。譬如530，再如艳照门，风声乍起之时，有人辟谣；直东窗事发后，道貌岸然者有之、恬不知耻者亦有之。原本成功就不属于规矩之人。纵观，无玄武门之血腥，何来一代宗皇；老毛若不有理而造反，一味守规矩，或为一介书匠耳。雅各一碗红豆汤便谋得以扫的长子权，再行骗去亚伯拉罕的祝福，并顺理成章让耶和华与他同在，可见上帝之“贤明”？。高等教育中有一句，顺利的是骗子，倒霉的是傻子，我是？不还有企业家的原罪吗？有时竟被社会所放任？<br><br>1. 前面讲的自定义类型转换器是基于 OGNL 的 DefaultTypeConverter 类并实现 convertValue() 方法，两个转换方向的逻辑都写在这一个方法中。而 Struts 2 为我们提供了一个 DefaultTypeConverter 的抽象子类 StrutsTypeConverter 来继承，并实现其中两个抽象方法 convertFromString() 和 convertToString()，这要简单易懂。对比 Struts 1 的转换器是要实现 org.ap&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/03/30/189502.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/189502.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-03-30 03:52 <a href="http://www.blogjava.net/Unmi/archive/2008/03/30/189502.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(六) </title><link>http://www.blogjava.net/Unmi/archive/2008/02/28/182567.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Wed, 27 Feb 2008 16:06:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/28/182567.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/182567.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/28/182567.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/182567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/182567.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 米洗毕，水适量，盖合上，心摇摆，总觉水多了一分或是少了几点，于是重又加上或倒出少许，其实这丁点份量完全无碍煮出香喷喷的饭来。及至将熟之际，亦有犹豫，心中默数至少10，如再有不定辄至20，掐火，20对最终质量来说或有所损。<br><br>1. Struts2 的 Action 中可直接用属性来封装请求参数和处理结果，此谓之属性驱动。也可以像 Struts1 那样使用专门的 ActionForm 来处理请求参数和结果，只不过 Struts2 用的是一个更单纯的 POJO，这就做模型驱动；此时的 Action 需要实现 ModelDriven 接口，并实现其 getModel() 方法将 Action 与对应 Model 相关联。<br><br>2. 例子说明采用模型驱动的 Action (UserBean 是一个普通 JavaBean，其中定义了 username 和 password 两个属性)：<br>    public class LoginAction implments Action, ModelDriven<UserBean>{<br>        UserBe&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/28/182567.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/182567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-28 00:06 <a href="http://www.blogjava.net/Unmi/archive/2008/02/28/182567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在仅实现到 Servlet 2.3/JSP 1.2 规范、JDK为1.4 的容器中用 Struts 2 会有什么问题？</title><link>http://www.blogjava.net/Unmi/archive/2008/02/25/182094.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Mon, 25 Feb 2008 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/25/182094.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/182094.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/25/182094.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/182094.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/182094.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts  的官方网站 http://struts.apache.org/2.0.11/index.html 列出了 Struts 2 的平台要求有三：<br><br>· Servlet API 2.4<br><br>· JSP API 2.0<br><br>· Java 5<br><br>但不知道官方的声明 Struts 2 要求的容器规范是 Servlet 2.4/JSP 2.0，是因为用到它们的什么特性了。或者是如果我要在只实现到 Servlet 2.3/JSP 1.2 的容器中运行 Struts 2 Web 应用程序该注意些什么，哪些特性不能用。<br><br>公司目前的应用服务器是 WAS 5.1，但对于将来新上的项目本人却有那么一种冲动。不知哪位有在 Servlet 2.3/JSP 1.2 下开发 Struts 2 应用程序的经历，可否教授一番，万分感激！&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/25/182094.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/182094.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-25 22:31 <a href="http://www.blogjava.net/Unmi/archive/2008/02/25/182094.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(五) </title><link>http://www.blogjava.net/Unmi/archive/2008/02/24/181744.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Sun, 24 Feb 2008 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/24/181744.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/181744.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/24/181744.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/181744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/181744.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 常有这样的梦：不知何来一本似乎是无字天书，而其中的字句却是慢慢地、渐显可辨。同时现实中的自己完全能察觉这是一个梦，极怕即刻醒来，想多记取那些天外之语。但总不能如愿，醒来时还留有某些字句痕迹，再过后就全然忘却。仿佛进入的是一个太虚幻境。<br><br>1. <action ../> 元素的一个前所未有的特性是，name 属性可以用通配符，class 和 method 属性中可以用 name 中的匹配参数，{0}/{1} 的形式。举两个例子说明：<br>    ①<action name="*Action" class="com.unmi.LoginRegistAction" method="{1}"><br>         URL 是 registAction.action 时，会执行 LoginRegistAction 类实例的 regist() 方法<br>    ②<action name="*_*" class="actions.{1}Action" method="{2}"><br>         URL 是 Book_save.action 时，会执行 ac&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/24/181744.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/181744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-24 14:30 <a href="http://www.blogjava.net/Unmi/archive/2008/02/24/181744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(四)</title><link>http://www.blogjava.net/Unmi/archive/2008/02/23/181535.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Fri, 22 Feb 2008 17:00:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/23/181535.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/181535.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/23/181535.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/181535.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/181535.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在这个陌生的城市里，的确承受着巨大的压力。房东的驱赶与无理的加价，想置个家电须顾及到搬迁。也开始学会了算计着过活，两块五与三块的公交，宁愿等待与拥挤，就连省下一顿饭钱都能暗自庆幸。周末了，老老实实呆在家里吧！<br><br>1. 按这个顺序加载 Struts2 的常量，struts-default.xml、struts-plugin.xml、struts.xml、web.xml；后加载的会覆盖前面的同名常量。强烈不推荐在 web.xml 中配置 Struts2 常量。<br><br>2. Struts1 中有一种 Action 类型是 ForwardAction，而在 Struts2 中相应的配置方式是 <action name="Showcase"><result>/showcase.jsp</result></action>，Showcase.action 直接映射到 /showcase.jsp。<br><br>3. struts.xml 中 <package ../> 的 namespace (命名空间) 相当于 Struts1 的模块的概念，但比 Struts1 的&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/23/181535.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/181535.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-23 01:00 <a href="http://www.blogjava.net/Unmi/archive/2008/02/23/181535.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(三)</title><link>http://www.blogjava.net/Unmi/archive/2008/02/21/180963.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Wed, 20 Feb 2008 16:20:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/21/180963.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/180963.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/21/180963.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/180963.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/180963.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 连续几日熬夜，以致左胸又起闷痛感，何来如此辛苦？不由自忖，人生至今，印象中从来就没有过安逸与幸福感。常要回避刺疼。<br><br>1. WebWork 的核心控制器是 ServletDispatcher，映射到 *.action 的 <url-pattern> 即可。在 WebWork 与 Struts2 的 struts.xml 和 struts.properties 相对应的分别是 xwork.xml 和 webwork.properties，文件内容几乎一样，只几个关键字的差异。<br><br>2. Struts2 的 struts.xml 中 <action ../> 的 name 属性相当于 struts1 的 <action ../> 的 path 属性，但在这里不需要以 "/" 开始。<br><br>3. Action 中使用业务逻辑组件实例时，通常不直接 New，而会通过工厂方法或 IOC 容器。虽然 WebWork 有 IOC 容器，但 Struts2 通常会使用 Spring 的 IOC。<br><br>4.  可把 struts.xml 拆成多个文&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/21/180963.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/180963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-21 00:20 <a href="http://www.blogjava.net/Unmi/archive/2008/02/21/180963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(二) </title><link>http://www.blogjava.net/Unmi/archive/2008/02/19/180741.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Tue, 19 Feb 2008 15:33:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/19/180741.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/180741.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/19/180741.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/180741.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/180741.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 记笔记，尤其是在 Blog 里记，实则是浪费时间。让学习、阅读的速度以数量级的下降，收获时当时掌握的更细，却并不代表着真记得牢。一小段时间不用它，同样可以忘得很干净，也就是方便于以后能由此泛起些涟漪，如能抛砖引玉就更幸运了。入正题：<br><br>1. 记得 Struts1 的 struts-config.xml 是放在 WEB-INF 目录下的，Struts2 的 struts.xml 却要放到 WEB-INF/classes 下的，傻眼了吧，反正我是。没看仔细之前，总给我报 There is no Action mapped for namespace / and action name Login. - [unknown location]  错误。因未在 web.xml 指定 struts.xml，所以用 ClassLoader 来加载它了。<br><br>2. 最简单的 Struts2 应用都要用到 freemarker-xxx.jar 包，还没弄明白它在其中所扮演的角色。<br><br>3. FilterDispatcher 要处理所有的 Web 请求，所以它的&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/19/180741.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/180741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-19 23:33 <a href="http://www.blogjava.net/Unmi/archive/2008/02/19/180741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unmi 的 Struts2 学习笔记(一)</title><link>http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Mon, 18 Feb 2008 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/180570.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/180570.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/180570.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Struts 从1.1使用到1.3已有多年，都升成2了，却来了个大变脸，须重新审视一番了。从头学习，记下笔记，以要点式。<br><br>1. Struts2 与 Struts1 似乎没什么血缘关系了，承自于 WebWork，直害 WebWork 不再推出新版本了，原先的 WebWork 使用者只需顺其然，即是水道渠成。<br><br>2. Struts1 的核心控制器是 ActionServlet，而 Struts2 的核心控制器是 ServletDispatcher。Struts2 的业务 Action 会在运行时生成 Action 代理。<br><br>3. Struts1 的 Action 须继承抽象 Action 类，侵入了 Servlet API；而 Struts2 的 Action 可以实现 ActionSupport，或者只要一个纯净的 POJO 来充当，完全与 Servlet 绝缘。也因此带来测试性 Struts2 要比 Struts1 强，可把 Struts TestCase 扔到一旁去了。<br><br>4. Struts1 在运行时一个 Actio&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/180570.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2008-02-18 23:45 <a href="http://www.blogjava.net/Unmi/archive/2008/02/18/180570.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提交多行数据到Struts的ActionForm的List属性中</title><link>http://www.blogjava.net/Unmi/archive/2007/05/22/124168.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Tue, 22 May 2007 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2007/05/22/124168.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/124168.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2007/05/22/124168.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/124168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/124168.html</trackback:ping><description><![CDATA[WEB 应用中一般都会处理主从表的信息, 或者称之为头层与行层的一对多的关系数据,如订单头/订单明细. 对于这种关系数据提交到后台的 Struts 的 ActionForm 的话, 这个 ActionForm 就要好好的设计一下, 不然会给自已带来许多额外的代码. 比如有的人的处理方法就是把页面提交到后台的毫无关系的散装数据非常吃力的拼凑一对多的关系对象出来. <br /><br />下面举一个如今非常现实的关于股票的例子, 简单的应用场景是: 记录某个帐户所持有的股票信息,提交到后台,然后显示出来. 输入页面如下图<br /><br />帐户信息包括帐户名和资金帐号;持有股票的每一行信息包括股票代码, 股票名称, 成本价, 股票数量. 股票行可以动态增删.<br /><br /><div align="center"><img src="http://www.blogjava.net/images/blogjava_net/unmi/ScreenShots/StrutsInput.jpg" align="absMiddle" border="1" /><br />输入页面 input.jsp<br /></div><div align="center"><br /><img src="http://www.blogjava.net/images/blogjava_net/unmi/ScreenShots/classes.png" /><br />后台处理类图</div><br />为了简化不必要的代码, 我们要实现的终及目标是: 在输入页面上点击 "保存数据" 按钮, 由 Struts 的 RequestProcessor.processPopulate() 方法把页面提交的基本信息组装到 AccountStockForm 的 account 的对应属性中,股票行信息对应生成一个 Stock 实例加到 AccountStockForm的 List 属性 stocks 中, 后续在 AccountStockAction 中直接处理account和stocks属性就非常简单了. AccountStockForm在这里只作为一个壳.<br /><br />下面从前台到后台说明关键性的代码, 完整的 MyEclipse 工程包可以点击 <a href="http://www.blog.com.cn/user86/unmi/upload/523417378.zip">TestStruts135.zip</a>下载到.<br /><br /><strong>一</strong>: <strong>struts-config.xml</strong> 配置<br />  <textarea class="xml" style="WIDTH: 100%" name="code" rows="5">&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd"&gt;
&lt;struts-config&gt;
    &lt;form-beans&gt;
        &lt;form-bean name="accountStockForm"
          type="com.unmi.form.AccountStockForm"/&gt;
    &lt;/form-beans&gt;
    &lt;action-mappings&gt;
        &lt;action path="/showStock" name="accountStockForm"
         type="com.unmi.action.AccountStockAction" scope="request"&gt;
            &lt;forward name="show" path="/show.jsp"/&gt;
        &lt;/action&gt;
    &lt;/action-mappings&gt;
&lt;/struts-config&gt;</textarea><br /><br /><strong>二</strong>: 输入页面 <strong>input.jsp</strong>, 注意表单域命名<br />  <textarea class="xml" style="WIDTH: 100%" name="code" rows="5">    &lt;html:form action="/showStock"&gt;
        &lt;h3&gt;记录持有的股票&lt;br&gt;&lt;/h3&gt;
        &lt;fieldset&gt;s&lt;legend&gt;基本信息&lt;/legend&gt;
        &lt;table width="100%" border=0&gt;&lt;tr&gt;
            &lt;td&gt;帐户名:&lt;html:text property="account.name"/&gt;&lt;/td&gt;
            &lt;td&gt;资金帐号:&lt;html:text property="account.number"/&gt;&lt;/td&gt;
        &lt;/tr&gt;&lt;/table&gt;
        &lt;/fieldset&gt;
        &lt;br&gt;
        &lt;fieldset&gt;&lt;legend&gt;持有股票&lt;/legend&gt;
        &lt;table width=100% border=0 id="stockTable"&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input type="checkbox" onclick="checkAll(this)"&gt;&lt;/td&gt;
            &lt;td&gt;股票代码&lt;/td&gt;
            &lt;td&gt;股票名称&lt;/td&gt;
            &lt;td&gt;成本价&lt;/td&gt;
            &lt;td&gt;股票数量&lt;/td&gt;
        &lt;/tr&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input type="checkbox" name="check"&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input name="stocks[0].code" size="15"&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input name="stocks[0].name" size="15"&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input name="stocks[0].price" size="15"&gt;&lt;/td&gt;
            &lt;td&gt;&lt;input name="stocks[0].quantity" size="15"&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;/table&gt;
    &lt;/html:form&gt;</textarea><br /><br />例如输入框名 account.name 提交后能设置到 accountStockForm 的account的name属性<br />输入框名为 stocks[0].code 提交后会设置到 accountStockForm 的 List stocks的第一个元素的code属性.以此类推<br />在提交表单前要重排行层的索引,从 0 起, 否则到后右的 Form 会一些空数据.<br /><br />三: <strong>AccountStockForm </strong>的关键代码<br />  <textarea class="java" style="WIDTH: 100%" name="code" rows="4">    private Account account = new Account();
    private List stocks = new AutoArrayList(Stock.class);
    
    public void setStocks(List stocks)
    {
        this.stocks.clear();
        this.stocks.addAll(stocks);
    }</textarea><br /><br />定义了两个属性,分别是一个bean(Account,接受基本信息)和一个List(stocks,接受股票行信息),注意这两个属性必须初始化,不然在表单提交后会出现空指针错误. setStocks方法是让stocks属性永远保有持是一个 AutoArrayList 实例. 这样在表单提交后设置值是总能调用 AutoArrayList 的 get(int index) 方法.<br /><br /><strong>四</strong>: 自定义的 <strong>AutoArrayList<br /></strong>  <textarea class="java" style="WIDTH: 100%" name="code" rows="5">public class AutoArrayList extends ArrayList {
    
    private Class itemClass;
    
    public AutoArrayList(Class itemClass) {
        this.itemClass = itemClass;
    }
    
    public Object get(int index) {
        try {
            while (index &gt;= size()) {
                add(itemClass.newInstance());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return super.get(index);
    }
}</textarea><br />理解为什么要继承一个ArrayList, 覆写get(int index)方法要简单了解 Struts 处理提交数据的工作原理: 大致如下: 页面提交后, 由 ActionServlet交给RequestProcessor的processPopulate()方法,由processPopulate()方法收集请求数据,放在map中,key为表单域的name属性,如 name, account.name, stocks[0].code. 然后借助于 Common-beanutils 工具包设置到 ActionForm 的相应属性中<br />如果key是简单的'name',直接form.setName(map.get('name'));<br />如果key是'account.name', 执行的操作是 form.getAccount().setName(map.get('account.name');<br />如果key是'stocks[0].code', 它可以对应到数据或集合中,如对于数组 form.stocks[0].code=map.get('stocks[0].code'); 对于集合(List) form.get(0).setCode(map.get('stocks[0].code'))<br />从上也能理解为什么 form 中的那两个属性必须实始化,不然会出现空指针错. 而且为什么 stocks 要用 AutoArrayList 实例化, 避免出现索引越界的错误.<br /><br /><strong>五</strong>: 在 <strong>AccountStockAction</strong> 中可以打印出提交的数据<br />  <textarea class="java" style="WIDTH: 100%" name="code" rows="5">        AccountStockForm asForm = (AccountStockForm)form;
        
        Account account = asForm.getAccount();
        System.out.println("Account Name:"+account.getName()+
                " Number:"+account.getNumber());
        
        List stocks = asForm.getStocks();
        for (int i=0; i&lt;stocks.size() ;i++)
        {
            Stock stock = (Stock)stocks.get(i);
            System.out.println("Stock["+i+"]Code:"+stock.getCode()+
                    " Name:"+stock.getName()+
                    " Price:"+stock.getPrice()+
                    " Quantity:"+stock.getQuantity());
        }
        
        return mapping.findForward("show");</textarea><br /><br />在Action中就能直接取用提交来的数据了,不需要 getParameterValues()了.<br /><br /><strong>六</strong>: 最后一步, 对于这样的 ActionForm 我们应该如何显示出来呢,我们用了 nested 标签 (<strong>show.jsp</strong>)<br />  <textarea class="xml" style="WIDTH: 100%" name="code" rows="5">    &lt;html:form action="/showStock"&gt;
        &lt;h3&gt;修改持有的股票&lt;br&gt;&lt;/h3&gt;
        &lt;fieldset&gt;&lt;legend&gt;基本信息&lt;/legend&gt;
        &lt;table width="100%" border=0&gt;&lt;tr&gt;
        &lt;nested:nest property="account"&gt;
            &lt;td&gt;帐户名:&lt;nested:text property="name" readonly="true"/&gt;&lt;/td&gt;
            &lt;td&gt;资金帐号:&lt;nested:text property="number" readonly="true"/&gt;&lt;/td&gt;
        &lt;/nested:nest&gt;
        &lt;/tr&gt;&lt;/table&gt;
        &lt;/fieldset&gt;
        &lt;br&gt;
        &lt;fieldset&gt;&lt;legend&gt;持有股票&lt;/legend&gt;
        &lt;table width=100% border=0  id="stockTable"&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input type="checkbox" onclick="checkAll(this)"&gt;&lt;/td&gt;
            &lt;td&gt;股票代码&lt;/td&gt;
            &lt;td&gt;股票名称&lt;/td&gt;
            &lt;td&gt;成本价&lt;/td&gt;
            &lt;td&gt;股票数量&lt;/td&gt;
        &lt;/tr&gt;
        &lt;nested:iterate id="stock" property="stocks"&gt;
        &lt;tr&gt;
            &lt;td&gt;&lt;input type="checkbox" name="check"&gt;&lt;/td&gt;
            &lt;td&gt;&lt;nested:text property="code" size="15"/&gt;&lt;/td&gt;
            &lt;td&gt;&lt;nested:text property="name" size="15"/&gt;&lt;/td&gt;
            &lt;td&gt;&lt;nested:text property="price" size="15"/&gt;&lt;/td&gt;
            &lt;td&gt;&lt;nested:text property="quantity" size="15"/&gt;&lt;/td&gt;
        &lt;/tr&gt;
        &lt;/nested:iterate&gt;
        &lt;/table&gt;
    &lt;/html:form&gt;</textarea><br /><br />可以查看生成的HTML源文件, 你就能更好理解 input.jsp 中的表单域为什么要那么命名了.<br /><br /><br />小结的内容是请注意以下几个重点:<br />1. 输入信息的页面 input.jsp 没有使用 Struts 标签,目的是让大家理解,表单域应如何命名才能对应上 ActionForm 中的哪一个属性<br />2. 显示数据的页面是用的 Struts 标签,并留意 nested 标签的应用. 可以从生成的 HTML 源文件中体会出什么<br />3. 提交数据前要重新编排行层中输入框 Name 属性的下标植.<br />4. 回味为什么要引入 ArrayList 的子类 AutoArrayList, 关键在 get(int index) 方法的覆写<br />5. 最后是 ActionForm 中 List 属性 stocks 的 setter 方法的实现, 保持那个 List 的运行时具体类型不变 <br /><br />参考:<br />    1. <a href="http://bookmark.blogcn.com/wz/pages/goto.aspx?uid=22254178&amp;addressid=503580">移：使用Struts提交多行数据 - kent的专栏 - CSDNBlog</a><br /><br />完整 MyEclipse 工程文件下载 <a href="http://www.blog.com.cn/user86/unmi/upload/523417378.zip">TestStruts135.zip </a>, 不包含 Struts1.35 的jar. <img src ="http://www.blogjava.net/Unmi/aggbug/124168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2007-05-22 23:29 <a href="http://www.blogjava.net/Unmi/archive/2007/05/22/124168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts下的MapForm&amp;nbsp;[转]</title><link>http://www.blogjava.net/Unmi/archive/2007/03/01/124152.html</link><dc:creator>隔叶黄莺</dc:creator><author>隔叶黄莺</author><pubDate>Thu, 01 Mar 2007 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/Unmi/archive/2007/03/01/124152.html</guid><wfw:comment>http://www.blogjava.net/Unmi/comments/124152.html</wfw:comment><comments>http://www.blogjava.net/Unmi/archive/2007/03/01/124152.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Unmi/comments/commentRss/124152.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Unmi/services/trackbacks/124152.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 我们知道Struts的ActionForm一直被大家视为缺陷，觉得多余，但我个人认为ActionForm还是有它存在的理由。我们建立ActionForm通常和Web页面的Form元素绑定，用于数据的收集和校验等。ActionForm的属性必须声明，然后才能用于和Web页面中，我们经常遇到一些属性不需要全部声明，如查询条件等，而且ActionForm的属性太多时管理也是个问题，再另一些情况下，如采购单，使用master/detail方式，ActionForm的创建变的困难，好多属性均不确定，如采购明细为对条记录，这样处理比较麻烦，在这篇文章中，我们将向你讲述如何使用Struts的MapForm机制实现这样的功能。<br>我们希望ActionForm能够接收Map数据，这样我们的管理就变的容易多啦，在Struts 1.1以后版本这样的处理变得非常简单，我们在ActionForm中声明一个Map变量。&nbsp;&nbsp;<a href='http://www.blogjava.net/Unmi/archive/2007/03/01/124152.html'>阅读全文</a><img src ="http://www.blogjava.net/Unmi/aggbug/124152.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Unmi/" target="_blank">隔叶黄莺</a> 2007-03-01 12:45 <a href="http://www.blogjava.net/Unmi/archive/2007/03/01/124152.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>