﻿<?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-旱头憨脑-文章分类-j2ee</title><link>http://www.blogjava.net/lanluquan/category/14512.html</link><description>lanluquan</description><language>zh-cn</language><lastBuildDate>Thu, 19 Jul 2007 02:58:24 GMT</lastBuildDate><pubDate>Thu, 19 Jul 2007 02:58:24 GMT</pubDate><ttl>60</ttl><item><title>Javascript cookie操作攻略</title><link>http://www.blogjava.net/lanluquan/articles/131040.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Wed, 18 Jul 2007 05:26:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/131040.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/131040.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/131040.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/131040.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/131040.html</trackback:ping><description><![CDATA[<p>为了在Cookie中解决字符乱码问题，建议在保存Cookie前对Value值进行编码，可以由服务器后台写入Cookie，也可以在Browser端使用Javascript写入。<br>以下是在Browser端通过Javascript操作Cookie：（均为网络转载）</p>
<p>构造通用的cookie处理函数：<br>1．添加一个cookie：addCookie(name,value,expireHours)<br>该函数接收3个参数：cookie名称，cookie值，以及在多少小时后过期。这里约定expireHours为0时不设定过期时间，即当浏览器关闭时cookie自动消失。该函数实现如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_101_346_Open_Image onclick="this.style.display='none'; Codehighlighter1_101_346_Open_Text.style.display='none'; Codehighlighter1_101_346_Closed_Image.style.display='inline'; Codehighlighter1_101_346_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_101_346_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_346_Closed_Text.style.display='none'; Codehighlighter1_101_346_Open_Image.style.display='inline'; Codehighlighter1_101_346_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;addCookie(name,value,expireHours)</span><span id=Codehighlighter1_101_346_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_101_346_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;cookieString</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">escape(value);<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">判断是否设置过期时间</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_174_314_Open_Image onclick="this.style.display='none'; Codehighlighter1_174_314_Open_Text.style.display='none'; Codehighlighter1_174_314_Closed_Image.style.display='inline'; Codehighlighter1_174_314_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_174_314_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_174_314_Closed_Text.style.display='none'; Codehighlighter1_174_314_Open_Image.style.display='inline'; Codehighlighter1_174_314_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(expireHours</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_174_314_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_174_314_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;date</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>date.setTime(date.getTime</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">expireHours</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">3600</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;转换为毫秒</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">cookieString</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cookieString</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;expire=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">date.toGMTString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>document.cookie</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">cookieString;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<p><br>2．获取指定名称的cookie值：getCookie(name)<br>该函数返回名称为name的cookie值，如果不存在则返回空，其实现如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_83_344_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_344_Open_Text.style.display='none'; Codehighlighter1_83_344_Closed_Image.style.display='inline'; Codehighlighter1_83_344_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_83_344_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_344_Closed_Text.style.display='none'; Codehighlighter1_83_344_Open_Image.style.display='inline'; Codehighlighter1_83_344_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;getCookie(name)</span><span id=Codehighlighter1_83_344_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_83_344_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;strCookie</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">document.cookie;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arrCookie</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">strCookie.split(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;将多cookie切割为多个名/值对</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_209_331_Open_Image onclick="this.style.display='none'; Codehighlighter1_209_331_Open_Text.style.display='none'; Codehighlighter1_209_331_Closed_Image.style.display='inline'; Codehighlighter1_209_331_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_209_331_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_209_331_Closed_Text.style.display='none'; Codehighlighter1_209_331_Open_Image.style.display='inline'; Codehighlighter1_209_331_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">arrCookie.length;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)</span><span id=Codehighlighter1_209_331_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_209_331_Open_Text><span style="COLOR: #000000">{&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;遍历cookie数组，处理每个cookie对</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;arr</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">arrCookie[i].split(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;找到名称为userId的cookie，并返回它的值</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(arr[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">name)<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;arr[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">;<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span></div>
<p><br>3．删除指定名称的cookie：deleteCookie(name)<br>该函数可以删除指定名称的cookie，其实现如下：<br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">script&nbsp;language</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">JavaScript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;type</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">text/javascript</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;!--</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_86_233_Open_Image onclick="this.style.display='none'; Codehighlighter1_86_233_Open_Text.style.display='none'; Codehighlighter1_86_233_Closed_Image.style.display='inline'; Codehighlighter1_86_233_Closed_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_86_233_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_86_233_Closed_Text.style.display='none'; Codehighlighter1_86_233_Open_Image.style.display='inline'; Codehighlighter1_86_233_Open_Text.style.display='inline';" src="http://www.blogjava.net/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">&nbsp;deleteCookie(name)</span><span id=Codehighlighter1_86_233_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"></span><span id=Codehighlighter1_86_233_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000">&nbsp;date</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Date();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top>date.setTime(date.getTime()</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">10000</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;删除一个cookie，就是将其过期时间设定为一个过去的时间</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">document.cookie</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">name</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">=v;&nbsp;expire=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">date.toGMTString();<br><img src="http://www.blogjava.net/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">--&gt;</span><span style="COLOR: #008000"><br><img src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&lt;/</span><span style="COLOR: #000000">script</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span></div>
<img src ="http://www.blogjava.net/lanluquan/aggbug/131040.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2007-07-18 13:26 <a href="http://www.blogjava.net/lanluquan/articles/131040.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.0 AOP 心得（二）</title><link>http://www.blogjava.net/lanluquan/articles/76366.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Fri, 20 Oct 2006 05:10:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/76366.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/76366.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/76366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/76366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/76366.html</trackback:ping><description><![CDATA[      续上文，在实现了对Service层的AOP后，我决定用同样的方法去改造我的Spring controller层和Interceptor。发现controller层根本没有成功，而Interceptor的AOP只能出现在单元测试中，放在服务器上跑又是不成功。也许Spring的AOP只能对POJO进行AOP，而对非POJO的，如servlet等是不行的。这个问题要放到以后再学习和解决。<img src ="http://www.blogjava.net/lanluquan/aggbug/76366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2006-10-20 13:10 <a href="http://www.blogjava.net/lanluquan/articles/76366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.0 AOP使用心得（一）</title><link>http://www.blogjava.net/lanluquan/articles/76341.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Fri, 20 Oct 2006 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/76341.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/76341.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/76341.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/76341.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/76341.html</trackback:ping><description><![CDATA[      正在做的项目中有一个类似积分的需求，比如用户在讨论区发帖后，需要给一定的积分这样的需求。因为需求是变化的，同时为了使已经写好的发帖代码不被入侵，所以考虑使用Spring2.0 AOP来实现这个功能。<br />      毕竟是第一次使用Spring2.0的AOP，按照Reference中的介绍，准备使用Annotation来完成对AOP的配置。来看一下我做的步骤：<br />      一、需要使用Spring2.0的jar包，现在已经发布正式版的2.0了，可以从<a href="http://www.springframework.org/">http://www.springframework.org/</a>  上下载到最新的2.0版本。加入到项目的classpath中去。<br />      二、需要在配置文件中启用新的spring2.0的schema或者是dtd。   <br />      1、在Spring的xml配置文件中加入新的schema： <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">beans </span><span style="COLOR: #ff0000">xmlns</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/beans"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    xmlns:xsi</span><span style="COLOR: #0000ff">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    xmlns:aop</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/aop"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    xmlns:tx</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/tx"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    xsi:schemaLocation</span><span style="COLOR: #0000ff">="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"</span><span style="COLOR: #ff0000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    default-autowire</span><span style="COLOR: #0000ff">="byName"</span><span style="COLOR: #ff0000"> default-lazy-init</span><span style="COLOR: #0000ff">="true"</span><span style="COLOR: #0000ff">&gt;</span></div>       2、“如果使用Java 5的话，推荐使用Spring提供的@AspectJ切面支持，通过这种方式声明Spring AOP中使用的切面。 "@AspectJ"使用了Java 5的注解，可以将切面声明为普通的Java类。”——Spring reference<br />      3、为了使用AOP的Annotation，在配置文件中加入&lt;aop:aspectj-autoproxy /&gt;。<br />      4、编写切面类：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">@Aspect<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> ArticleRemoteAccountsService </span><span id="Codehighlighter1_100_1203_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /> </span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_381_530_Open_Image" onclick="this.style.display='none'; Codehighlighter1_381_530_Open_Text.style.display='none'; Codehighlighter1_381_530_Closed_Image.style.display='inline'; Codehighlighter1_381_530_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_381_530_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_381_530_Closed_Text.style.display='none'; Codehighlighter1_381_530_Open_Image.style.display='inline'; Codehighlighter1_381_530_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span id="Codehighlighter1_381_530_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/** */</span><span id="Codehighlighter1_381_530_Open_Text"><span style="COLOR: #008000">/**</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * 在发帖成功之后，给用户银币账户冲值<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@param</span><span style="COLOR: #008000"> arg<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> AccountsException<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> InstantiationException<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />     * </span><span style="COLOR: #808080">@throws</span><span style="COLOR: #008000"> IllegalAccessException<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />     </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    @After(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">execution(* com.company.ArticleManager.saveArticle(..))</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> &amp;&amp; args(arg)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> exSilByPost(Article arg) </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> AccountsException,<br /><img id="Codehighlighter1_746_1200_Open_Image" onclick="this.style.display='none'; Codehighlighter1_746_1200_Open_Text.style.display='none'; Codehighlighter1_746_1200_Closed_Image.style.display='inline'; Codehighlighter1_746_1200_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_746_1200_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_746_1200_Closed_Text.style.display='none'; Codehighlighter1_746_1200_Open_Image.style.display='inline'; Codehighlighter1_746_1200_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />            InstantiationException, IllegalAccessException </span><span id="Codehighlighter1_746_1200_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_746_1200_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (arg.getLastUpdateTime() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> arg.getArticleByParentId() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_870_968_Open_Image" onclick="this.style.display='none'; Codehighlighter1_870_968_Open_Text.style.display='none'; Codehighlighter1_870_968_Closed_Image.style.display='inline'; Codehighlighter1_870_968_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_870_968_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_870_968_Closed_Text.style.display='none'; Codehighlighter1_870_968_Open_Image.style.display='inline'; Codehighlighter1_870_968_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> arg.getArticleByRootId() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) </span><span id="Codehighlighter1_870_968_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_870_968_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO 主题帖</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (arg.getLastUpdateTime() </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> (arg.getArticleByParentId() </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">||</span><span style="COLOR: #000000"> arg<br /><img id="Codehighlighter1_1099_1196_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1099_1196_Open_Text.style.display='none'; Codehighlighter1_1099_1196_Closed_Image.style.display='inline'; Codehighlighter1_1099_1196_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1099_1196_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1099_1196_Closed_Text.style.display='none'; Codehighlighter1_1099_1196_Open_Image.style.display='inline'; Codehighlighter1_1099_1196_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />                        .getArticleByRootId() </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">)) </span><span id="Codehighlighter1_1099_1196_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1099_1196_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> TODO  回帖</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>这里需要注意的是使用Annotation的Poincut语法，<br />execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) <span class="code-keyword">throws</span>-pattern?)<br />这里就不累诉了。<br />同时要注意的如何得到参数的问题，写法参考如上。<img src ="http://www.blogjava.net/lanluquan/aggbug/76341.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2006-10-20 11:02 <a href="http://www.blogjava.net/lanluquan/articles/76341.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中，UTF-8 URL提交参数中文解决终极方案</title><link>http://www.blogjava.net/lanluquan/articles/74541.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Wed, 11 Oct 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/74541.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/74541.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/74541.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/74541.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/74541.html</trackback:ping><description><![CDATA[       以前使用GBK作为项目编码时候，已经自我感觉把所有的编码问题都搞定了，但没有想到换了一个项目中使用UTF-8作为编码时候，却出现了不能正确读取URL中的中文参数问题。而且问题比较搞笑，比如" &amp;key=非洲"，则在服务器端重可以正确读取，但是换了" &amp;key=非洲语"，则在服务器端读到的参数为非洲??。<br />       就以上情况分析，应该是在传输过程中丢失了某个字符，因为我们知道在传输中是以2进制形式传输。<br />       于是可以在JSP页面上，在提交URL之前，使用javascript的encodeURIComponent()来将参数编码成为UNICODE，之后在服务器端使用URLDecoder.decode进行解码。<br />        果然，解决问题。不过这种方式实在太不优雅。<img src ="http://www.blogjava.net/lanluquan/aggbug/74541.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2006-10-11 14:21 <a href="http://www.blogjava.net/lanluquan/articles/74541.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts中不限个数上传文件的实现方案</title><link>http://www.blogjava.net/lanluquan/articles/67051.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Fri, 01 Sep 2006 03:38:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/67051.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/67051.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/67051.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/67051.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/67051.html</trackback:ping><description><![CDATA[      在使用Struts的系统中使用 org.apache.struts.upload.FormFile 可以很方便的实现文件的上传，无论是单个或者多个文件。不过又应该如何来实现不限个数的文件上传呢？<br />      首先，在Jsp页面中，需要有像163那样动态添加附件的功能，这个可以使用JS来实现。代码如下：<br />       
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">                                            </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">tr </span><span style="COLOR: #ff0000">bgcolor</span><span style="COLOR: #0000ff">="#FFFFFF"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                                </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">td </span><span style="COLOR: #ff0000">nowrap id</span><span style="COLOR: #0000ff">="fileTD"</span><span style="COLOR: #ff0000"> align</span><span style="COLOR: #0000ff">="center"</span><span style="COLOR: #ff0000"> colSpan</span><span style="COLOR: #0000ff">="2"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                                    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="uploadFile(0)"</span><span style="COLOR: #ff0000"> type</span><span style="COLOR: #0000ff">="file"</span><span style="COLOR: #ff0000"> size</span><span style="COLOR: #0000ff">="40"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                                    </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">type</span><span style="COLOR: #0000ff">="button"</span><span style="COLOR: #ff0000"> onclick</span><span style="COLOR: #0000ff">="addFile()"</span><span style="COLOR: #ff0000"> value</span><span style="COLOR: #0000ff">="添加"</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                                </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">td</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />                                            </span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">tr</span><span style="COLOR: #0000ff">&gt;</span></div><br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> fileIndex </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> addFile() <br /><img id="Codehighlighter1_42_174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_42_174_Open_Text.style.display='none'; Codehighlighter1_42_174_Closed_Image.style.display='inline'; Codehighlighter1_42_174_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_42_174_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_174_Closed_Text.style.display='none'; Codehighlighter1_42_174_Open_Image.style.display='inline'; Codehighlighter1_42_174_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_42_174_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_42_174_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        fileIndex</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> spanId </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">fileTD</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> fileId </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">uploadFile(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">fileIndex</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        addInputFile(spanId, fileId);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> addInputFile(spanId, fileId) <br /><img id="Codehighlighter1_217_937_Open_Image" onclick="this.style.display='none'; Codehighlighter1_217_937_Open_Text.style.display='none'; Codehighlighter1_217_937_Closed_Image.style.display='inline'; Codehighlighter1_217_937_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_217_937_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_217_937_Closed_Text.style.display='none'; Codehighlighter1_217_937_Open_Image.style.display='inline'; Codehighlighter1_217_937_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_217_937_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_217_937_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> span </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.getElementById(spanId);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (span </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) <br /><img id="Codehighlighter1_297_934_Open_Image" onclick="this.style.display='none'; Codehighlighter1_297_934_Open_Text.style.display='none'; Codehighlighter1_297_934_Closed_Image.style.display='inline'; Codehighlighter1_297_934_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_297_934_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_297_934_Closed_Text.style.display='none'; Codehighlighter1_297_934_Open_Image.style.display='inline'; Codehighlighter1_297_934_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_297_934_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_297_934_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> divObj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">div</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> fileObj, delObj;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            divObj.id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> fileId;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               fileObj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;input type=file&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />               delObj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.createElement(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;input type=button onclick=delInputFile('</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> spanId </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">','</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> fileId </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">')&gt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            fileObj.name </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> fileId;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            fileObj.size </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">40</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            fileObj.className </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">input</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            delObj.value </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'删除';<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            divObj.appendChild(fileObj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            divObj.appendChild(document.createTextNode(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            divObj.appendChild(delObj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            span.appendChild(divObj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> delInputFile(spanId, fileId) <br /><img id="Codehighlighter1_980_1174_Open_Image" onclick="this.style.display='none'; Codehighlighter1_980_1174_Open_Text.style.display='none'; Codehighlighter1_980_1174_Closed_Image.style.display='inline'; Codehighlighter1_980_1174_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_980_1174_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_980_1174_Closed_Text.style.display='none'; Codehighlighter1_980_1174_Open_Image.style.display='inline'; Codehighlighter1_980_1174_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />    </span><span id="Codehighlighter1_980_1174_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_980_1174_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> span </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.getElementById(spanId);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> divObj </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> document.getElementById(fileId);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (span </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000"> divObj </span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">null</span><span style="COLOR: #000000">) <br /><img id="Codehighlighter1_1129_1171_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1129_1171_Open_Text.style.display='none'; Codehighlighter1_1129_1171_Closed_Image.style.display='inline'; Codehighlighter1_1129_1171_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1129_1171_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1129_1171_Closed_Text.style.display='none'; Codehighlighter1_1129_1171_Open_Image.style.display='inline'; Codehighlighter1_1129_1171_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span id="Codehighlighter1_1129_1171_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1129_1171_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />            span.removeChild(divObj);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span></div><br />上面代码中的Html和JS代码就可以实现动态添加行的效果。（上述JS代码参考了一位网友的实现，这里对他表示感谢。）<br />Html代码中的 <span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">input </span><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="uploadFile(0)"</span><span style="COLOR: #ff0000"> type</span><span style="COLOR: #0000ff">="file"</span><span style="COLOR: #ff0000"> size</span><span style="COLOR: #0000ff">="40"</span><span style="COLOR: #0000ff">&gt;<font color="#000000">容易让人迷惑，我也是第一次写</font><font color="#800000"> </font><span style="COLOR: #ff0000">name</span><span style="COLOR: #0000ff">="uploadFile(0)"<font color="#000000">这样的Html代码</font>。</span></span><span style="COLOR: #000000"><br /></span>这里的<font color="#0000ff">uploadFile(0)</font><font color="#000000">表示数组中index=0的元素，那么在Struts的FormBean中又应该如何让BeanUtils在做反射的时候可以正确的赋值呢？<br />来看一下FormBean中的代码：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> java.util.ArrayList;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.struts.action.ActionForm;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">import</span><span style="COLOR: #000000"> org.apache.struts.upload.FormFile;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_165_1491_Open_Image" onclick="this.style.display='none'; Codehighlighter1_165_1491_Open_Text.style.display='none'; Codehighlighter1_165_1491_Closed_Image.style.display='inline'; Codehighlighter1_165_1491_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_165_1491_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_165_1491_Closed_Text.style.display='none'; Codehighlighter1_165_1491_Open_Image.style.display='inline'; Codehighlighter1_165_1491_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> BulletinInfoForm </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> ActionForm </span><span id="Codehighlighter1_165_1491_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_165_1491_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">final</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000"> serialVersionUID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">7869342360944575352L</span><span style="COLOR: #000000">;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> Long id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String newsTitle;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String newsType;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> String newsContent;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> ArrayList</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">FormFile</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> uploadFiles </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> ArrayList</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">FormFile</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">();</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_682_719_Open_Image" onclick="this.style.display='none'; Codehighlighter1_682_719_Open_Text.style.display='none'; Codehighlighter1_682_719_Closed_Image.style.display='inline'; Codehighlighter1_682_719_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_682_719_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_682_719_Closed_Text.style.display='none'; Codehighlighter1_682_719_Open_Image.style.display='inline'; Codehighlighter1_682_719_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setUploadFile(String index, FormFile formFile) </span><span id="Codehighlighter1_682_719_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_682_719_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.uploadFiles.add(formFile);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_767_797_Open_Image" onclick="this.style.display='none'; Codehighlighter1_767_797_Open_Text.style.display='none'; Codehighlighter1_767_797_Closed_Image.style.display='inline'; Codehighlighter1_767_797_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_767_797_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_767_797_Closed_Text.style.display='none'; Codehighlighter1_767_797_Open_Image.style.display='inline'; Codehighlighter1_767_797_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ArrayList</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">FormFile</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"> getUploadFiles() </span><span id="Codehighlighter1_767_797_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_767_797_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.uploadFiles;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_1006_1022_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1006_1022_Open_Text.style.display='none'; Codehighlighter1_1006_1022_Closed_Image.style.display='inline'; Codehighlighter1_1006_1022_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1006_1022_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1006_1022_Closed_Text.style.display='none'; Codehighlighter1_1006_1022_Open_Image.style.display='inline'; Codehighlighter1_1006_1022_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> Long getId() </span><span id="Codehighlighter1_1006_1022_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1006_1022_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1053_1072_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1053_1072_Open_Text.style.display='none'; Codehighlighter1_1053_1072_Closed_Image.style.display='inline'; Codehighlighter1_1053_1072_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1053_1072_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1053_1072_Closed_Text.style.display='none'; Codehighlighter1_1053_1072_Open_Image.style.display='inline'; Codehighlighter1_1053_1072_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setId(Long id) </span><span id="Codehighlighter1_1053_1072_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1053_1072_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.id </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> id;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1107_1132_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1107_1132_Open_Text.style.display='none'; Codehighlighter1_1107_1132_Closed_Image.style.display='inline'; Codehighlighter1_1107_1132_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1107_1132_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1107_1132_Closed_Text.style.display='none'; Codehighlighter1_1107_1132_Open_Image.style.display='inline'; Codehighlighter1_1107_1132_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getNewsContent() </span><span id="Codehighlighter1_1107_1132_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1107_1132_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> newsContent;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1183_1220_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1183_1220_Open_Text.style.display='none'; Codehighlighter1_1183_1220_Closed_Image.style.display='inline'; Codehighlighter1_1183_1220_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1183_1220_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1183_1220_Closed_Text.style.display='none'; Codehighlighter1_1183_1220_Open_Image.style.display='inline'; Codehighlighter1_1183_1220_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setNewsContent(String newsContent) </span><span id="Codehighlighter1_1183_1220_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1183_1220_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.newsContent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> newsContent;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1253_1276_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1253_1276_Open_Text.style.display='none'; Codehighlighter1_1253_1276_Closed_Image.style.display='inline'; Codehighlighter1_1253_1276_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1253_1276_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1253_1276_Closed_Text.style.display='none'; Codehighlighter1_1253_1276_Open_Image.style.display='inline'; Codehighlighter1_1253_1276_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getNewsTitle() </span><span id="Codehighlighter1_1253_1276_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1253_1276_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> newsTitle;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1323_1356_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1323_1356_Open_Text.style.display='none'; Codehighlighter1_1323_1356_Closed_Image.style.display='inline'; Codehighlighter1_1323_1356_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1323_1356_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1323_1356_Closed_Text.style.display='none'; Codehighlighter1_1323_1356_Open_Image.style.display='inline'; Codehighlighter1_1323_1356_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setNewsTitle(String newsTitle) </span><span id="Codehighlighter1_1323_1356_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1323_1356_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.newsTitle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> newsTitle;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1388_1410_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1388_1410_Open_Text.style.display='none'; Codehighlighter1_1388_1410_Closed_Image.style.display='inline'; Codehighlighter1_1388_1410_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1388_1410_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1388_1410_Closed_Text.style.display='none'; Codehighlighter1_1388_1410_Open_Image.style.display='inline'; Codehighlighter1_1388_1410_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> String getNewsType() </span><span id="Codehighlighter1_1388_1410_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1388_1410_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> newsType;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img id="Codehighlighter1_1455_1486_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1455_1486_Open_Text.style.display='none'; Codehighlighter1_1455_1486_Closed_Image.style.display='inline'; Codehighlighter1_1455_1486_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_1455_1486_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_1455_1486_Closed_Text.style.display='none'; Codehighlighter1_1455_1486_Open_Image.style.display='inline'; Codehighlighter1_1455_1486_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setNewsType(String newsType) </span><span id="Codehighlighter1_1455_1486_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_1455_1486_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.newsType </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> newsType;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div></font><br />留意以上代码中的<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_59_105_Open_Image" onclick="this.style.display='none'; Codehighlighter1_59_105_Open_Text.style.display='none'; Codehighlighter1_59_105_Closed_Image.style.display='inline'; Codehighlighter1_59_105_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_59_105_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_105_Closed_Text.style.display='none'; Codehighlighter1_59_105_Open_Image.style.display='inline'; Codehighlighter1_59_105_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> setUploadFile(String index, FormFile formFile) </span><span id="Codehighlighter1_59_105_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_59_105_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.uploadFiles.add(formFile);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />这里提供的setUploadFIle(String index, FormFile formFile)其实就是给BeanUtils一个正确的借口，让它可以对uploadFile(0)这样的元素进行正确的反射。当然，这里不用考虑index，直接将formFile添加进list中。<br /><br />      因此，在Struts中不限个数上传文件的实现中，主要是页面中动态添加上传文件行和在FormBean中正确赋值，Action中要做的相信就很简单了，只要把FormBean中的List取出来逐个进行操作。<br />      <img src ="http://www.blogjava.net/lanluquan/aggbug/67051.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2006-09-01 11:38 <a href="http://www.blogjava.net/lanluquan/articles/67051.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring2.0 新特性之Bean新增范围session, request, global session</title><link>http://www.blogjava.net/lanluquan/articles/66222.html</link><dc:creator>旱头憨脑</dc:creator><author>旱头憨脑</author><pubDate>Mon, 28 Aug 2006 09:07:00 GMT</pubDate><guid>http://www.blogjava.net/lanluquan/articles/66222.html</guid><wfw:comment>http://www.blogjava.net/lanluquan/comments/66222.html</wfw:comment><comments>http://www.blogjava.net/lanluquan/articles/66222.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/lanluquan/comments/commentRss/66222.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/lanluquan/services/trackbacks/66222.html</trackback:ping><description><![CDATA[      在Spring2.0之前，我们对Bean的控制仅有两种：singleton和prototype。Spring默认的Bean是为singleton，在实际项目中，一般与状态无关的Bean，都可以使用singleton；而那些与具体状态相关的Bean，则应该显示的在Bean定义中设置为singleton=false。<br />      Spring2.0之前，我们是这么定义的：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="singletonBean"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="myBean.singletonBean"</span><span style="COLOR: #ff0000"> </span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />      </span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="notSingletonBean"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="myBean.notSingletonBean"</span><span style="COLOR: #ff0000"> singleton</span><span style="COLOR: #0000ff">="false"</span><span style="COLOR: #0000ff">/&gt;</span></div><br />      在Spring2.0以后，因为增加了session, request, global session三种Bean的范围，所以在Bean的配置上，也发生了改变，不过Bean的默认范围仍然是singleton。<br />       新的写法如下：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">bean </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="newBean"</span><span style="COLOR: #ff0000"> class</span><span style="COLOR: #0000ff">="myBean.newBean"</span><span style="COLOR: #ff0000"> scope</span><span style="COLOR: #0000ff">="session | request | global session | singleton | prototype"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">aop:scoped-proxy</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">bean</span><span style="COLOR: #0000ff">&gt;</span></div><br />       对于新增加的三种范围，Spring2.0对Bean的要求就是必须是在web环境中才能定义这三种范围。对比之前的singletoBean和notSingletonBean的XML定义，我们可以发现<font color="#000000"><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">aop:scoped-proxy</span></font><span style="COLOR: #0000ff"><font color="#000000">/&gt; 这个新的配置项。<br />      那么，这又是怎么一回事呢？<br />      为了理解为什么需要这一行和以前完全不同的Bean配置，我们需要对Spring2.0实现session, request, global session三种Bean的范围的原理进行研究。<br />      可以想象，对于开发人员来说，最重要的是得到一个实例，该实例提供给我们的就是和我们需要的Bean一样的接口。无论我们定义的Bean的范围如何，容器都要求可以将正确的实例返回给我们，那么，采用代理机制则可以完成这一个任务。代理机制屏蔽了基于Bean所定义的范围返回实例的要求，同时可以提供和我们所要求的Bean同样的接的口。基于这个原理，</font><font color="#000000">为了实现基于作用域机制的Bean的控制，Spring2.0引入了一个新的接口：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_23_145_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_145_Open_Text.style.display='none'; Codehighlighter1_23_145_Closed_Image.style.display='inline'; Codehighlighter1_23_145_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_23_145_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_23_145_Closed_Text.style.display='none'; Codehighlighter1_23_145_Open_Image.style.display='inline'; Codehighlighter1_23_145_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> Scope </span><span id="Codehighlighter1_23_145_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.blogjava.net/images/dot.gif" /></span><span id="Codehighlighter1_23_145_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />　Object get(String name, ObjectFactory objectFactory);</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">　Object remove(String name);<br /></span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />      这个接口是用来表示Bean范围的接口，而在ConfigurableBeanFactory接口中定义了Bean工厂相关Scope注册的方法，使得可往Bean工厂中加入新范围的Bean。<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> ConfigurableBeanFactory </span><span style="COLOR: #0000ff">extends</span><span style="COLOR: #000000"> HierarchicalBeanFactory,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />　</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> registerScope(String scopeName, Scope scope);<br /></span><span style="COLOR: #008000"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">　</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> destroyScopedBean(String beanName);</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">}<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />      同时，Spring2.0在AbstractFactoryBean的getBean方法中实现了对Scope Bean支持以及在WebApplicationContext中注册session.request,global session三种Scope，这里就不继续贴代码了。<br />      最后需要提醒的是global session是应用于基于portlet的web应用中才有意义。</font></span><img src ="http://www.blogjava.net/lanluquan/aggbug/66222.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/lanluquan/" target="_blank">旱头憨脑</a> 2006-08-28 17:07 <a href="http://www.blogjava.net/lanluquan/articles/66222.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>