﻿<?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-探索与发现</title><link>http://www.blogjava.net/zhaijianhui/</link><description>研究java技术</description><language>zh-cn</language><lastBuildDate>Sat, 22 Nov 2008 14:58:26 GMT</lastBuildDate><pubDate>Sat, 22 Nov 2008 14:58:26 GMT</pubDate><ttl>60</ttl><item><title>Increasing User Handle and GDI Handle Limits </title><link>http://www.blogjava.net/zhaijianhui/archive/2008/08/31/225943.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sun, 31 Aug 2008 12:53:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2008/08/31/225943.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/225943.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2008/08/31/225943.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/225943.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/225943.html</trackback:ping><description><![CDATA[<p>Have you ever been working with a good number of applications at once? Are you a naturally born multi tasker? Alright, answer me this - who has had Windows buckle under the weight of all of these applications and display error messages stating that the system is out of memory or out of resources, buttons and menus do not work correctly, or you get an error sound but no message on the screen? I&#8217;ve hit this numerous times, to the point that I&#8217;ve lost work because of it&#8230; </p>
<p>(By the way, Adobe, can you please implement that little feature that Microsoft Office has had for years known as &#8220;auto save&#8221;? I don&#8217;t know how many times I&#8217;ve managed to completely max out Windows designing a web site and have had Photoshop fall over dead and disappear off my screen, only to find out that when I open Photoshop up again that the entire thing saved jack-all, all of those layers and documents gone poof into the void of darkness&#8230; if Microsoft can do it, why can&#8217;t you?) </p>
<p>Sometimes this happens even when you have a lot of system memory (RAM) still available. For instance, open up Internet Explorer and hold Ctrl+N to open up as many Internet Explorer windows as you can before menus, icons, and menus start displaying incorrectly, disappear, buttons aren&#8217;t clickable, etc. Close a few out and check your Windows Task Manager in the &#8220;Performance&#8221; tab, I bet you will find that a lot of your Physical Memory is still available. </p>
<p>This publication applies to: </p>
<p>&nbsp;&nbsp;&nbsp; * Microsoft Windows 2000 Professional <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows 2000 Server <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows 2000 Advanced Server <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows XP Home Edition <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows XP Professional <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows XP Professional x64 Edition <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows XP Media Center Edition <br />
&nbsp;&nbsp;&nbsp; * Microsoft Windows XP Tablet PC Edition </p>
<p>DISCLAIMER: mikedopp.com and mikedopp hold no responsibility or liability whatsoever should something go wrong, or if you incorrectly modify the Windows Registry. Please take extreme caution while following this publication and follow the steps correctly. </p>
<p>&#8220;Okie-dokie, if I have all of this memory still available, why is Windows saying I&#8217;m out of memory and out of system resources!?&#8221; </p>
<p>Simple. You have hit the &#8220;user handle&#8221; or &#8220;GDI handle&#8221; limit in Windows. This limit is there for two reasons: </p>
<p>&nbsp;&nbsp;&nbsp; * Leaky applications or faulty code &amp; malware can&#8217;t easily crash the system by attempting to overflow the system with GDI handles, making everything un-usable until a reboot is performed. <br />
&nbsp;&nbsp;&nbsp; * To prevent a user from opening up more applications than the system can handle. </p>
<p>If you have 1 gigabyte (or 1024MB) of RAM or higher, the default User Handle and GDI Handle limits can be pretty restrictive when running a large working set of applications that demand the most from your system and tax it heavily. </p>
<p>&#8220;Do you feel my pain?&#8221; </p>
<p>Yes, of course. Otherwise, I wouldn&#8217;t be writing this article that is more than likely a good 2 or 3 pages in length. </p>
<p>I&#8217;m a designer and coder, I use Adobe Photoshop with a lot of documents opened up - on top of that, I usually listen to music while working as it helps me work better, so Windows Media Player 10 is usually open on my machine. Also opened are Windows Messenger, Microsoft Office Outlook 2003, SmartFTP (one of the best FTP clients I&#8217;ve ever used, highly recommended), Microsoft Word, a few dozen Internet Explorer windows, some Mozilla Firefox windows with a few tabs opened in each one, and EditPlus 2 for coding. </p>
<p>That&#8217;s a pretty heavy working set of applications, and I demand the most out of my computer when it comes to multitasking (I have a Pentium 4 2.66GHz, with 1.5GB of RAM just for those who are wondering). </p>
<p>I too have nailed these handle limits - more than once. After much searching and pondering I have finally come up with a working solution around this issue (hurray!) </p>
<p>&#8220;Yeah yeah, stop rambling and cut to the chase!&#8221; </p>
<p>First and foremost, I must warn you that modifying these settings incorrectly can render your Windows installation near useless. Also, depending on your computer configuration and the amount of RAM in your system, you may wish to play around with the numbers until you find a setting that is perfect for your computer. </p>
<p>To back up everything, open the Registry Editor (click on Start, Run, and then type &#8220;regedit.exe&#8221; (without the quotes). </p>
<p>To<span style="color: red">&nbsp;backup </span>a registry key: </p>
<p>&nbsp;&nbsp;&nbsp; * In the Registry Editor on the left hand side, you will see the navigation pane. Using your mouse or keyboard, navigate to the following subkeys: </p>
<p>&nbsp;&nbsp;&nbsp; * <span style="color: red">HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystems&nbsp;<br />
</span>&nbsp;&nbsp;&nbsp; * <span style="color: red">HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows&nbsp;</span><br />
&nbsp;&nbsp;&nbsp; * Right click on each of the subkeys above in the left hand pane and from the context menu that appears, choose the &#8220;Export&#8221; option. Save the exported registry data file where ever you wish, but make sure that it will be accessible should we need to restore the files. </p>
<p>&#8220;OK, I&#8217;ve backed everything up! Now what!?&#8221; </p>
<p>Don&#8217;t quit the Registry Editor just yet - we still need to make some modifications in order to increase the handle limits in Windows. </p>
<p>With the Registry Editor opened, navigate to <span style="color: red">HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\SubSystem</span>s. You will notice a set of &#8220;REG_MULTI_SZ&#8221; and &#8220;REG_EXPAND_SZ&#8221; keys in the right hand pane. The one that we are interested in modifying is called &#8220;Windows&#8221;. </p>
<p>To modify the key, double click on it. It should look something like this: </p>
<p>&nbsp;&nbsp;&nbsp; %SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,<span style="color: red">3072</span>,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16 </p>
<p>The section of this string we are interested in modifting is &#8220;<span style="color: red">SharedSection</span>&#8221;. </p>
<p>In the SharedSection part of the string you will notice 3 numbers. What we are interested in is the middle value, &#8220;3072?. Modify this value so that the middle number is &#8220;<span style="color: red">8192</span>?. </p>
<p>It should look something like this after modifying the value: </p>
<p>&nbsp;&nbsp;&nbsp; %SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,8192,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16 </p>
<p>Now that we&#8217;ve changed this, lets continue, shall we? </p>
<p>In the left hand pane of the Registry Editor, navigate to<span style="color: red">&nbsp;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows</span>. In the right hand side, you will see two REG_DWORD values, named &#8220;<span style="color: red">GDIProcessHandleQuota</span>&#8221; and &#8220;<span style="color: red">USERProcessHandleQuota</span>&#8221;. We will need to modify both of these. </p>
<p>The first key we will want to modify is &#8220;GDIProcessHandleQuota&#8221;. This keys value can be set between 256 and 16,384 (maximum), and the default value is 10,000. I&#8217;d recommend using <span style="color: red">15,000</span> as a value for this key, however if you are doing a lot of multitasking, shoot for the stars and go with 16,384. </p>
<p>This key can not be set past 16,384 as it is the maximum acceptable value. </p>
<p>Now, lets modify &#8220;USERProcessHandleQuota&#8221;. This keys value can be set between 200 and 18,000 (maximum), with a default value of 10,000. I&#8217;d recommend increasing this value to the same number used with &#8220;GDIProcessHandleQuota&#8221;, however as previously mentioned if you are working with a hefty application workload, shoot for the stars and go wth the maximum value of 18,000. </p>
<p>This key can not be set past 18,000 as it is the maximum acceptable value. </p>
<p>Do NOT attempt to increase these values past the maximum - Windows will become very unstable and may even stop working correctly. If Windows starts acting up after changing these values, lower them until the issues are resolved, or restore the backups of these keys&#8217; values that we created before making modifications. </p>
<p>Now that you&#8217;ve changed these values, restart your computer and tax the system using the Internet Explorer trick mentioned previously - open Internet Explorer and hold down Ctrl+N on your keyboard to open up new Internet Explorer windows. Continue this until menus, buttons, and user interface elements stop working correctly. Also, open any applications you run day-to-day while you are performing this, so that you can get more of an idea if you have everything configured correctly. </p>
<p>You may also want to monitor your memory usage and handles information in Task Manager to see whether or not the above registry values need any more modifications. </p>
<p>I hope this helps with any multi-tasking issues you may have run into while running Microsoft Windows, now get back to work! </p>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/225943.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2008-08-31 20:53 <a href="http://www.blogjava.net/zhaijianhui/archive/2008/08/31/225943.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>trim right&amp; trim left</title><link>http://www.blogjava.net/zhaijianhui/archive/2007/09/20/146942.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Thu, 20 Sep 2007 14:58:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2007/09/20/146942.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/146942.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2007/09/20/146942.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/146942.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/146942.html</trackback:ping><description><![CDATA[rtrim &amp; ltrim，，自己写的。。<br />
<br />
public static boolean hasLength(String str)<br />
&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return str != null &amp;&amp; str.length() &gt; 0;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static String trimRight(String source){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(!hasLength(source))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return source;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;  if(source.trim().length()==0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int index=0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=source.length()-1;i&gt;=0;i--){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(Character.isWhitespace(source.charAt(i))){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; index=i;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return index!=0 ? source.substring(0,index): source;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public static String trimLeft(String source){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(!hasLength(source))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return source;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(source.trim().length()==0)<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return "";<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int index=0;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for(int i=0;i&lt;source.length();i++){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(Character.isWhitespace(source.charAt(i))){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; index=i+1;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return index!=0 ? source.substring(index): source;<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/146942.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2007-09-20 22:58 <a href="http://www.blogjava.net/zhaijianhui/archive/2007/09/20/146942.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails find method</title><link>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107648.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sat, 31 Mar 2007 08:17:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107648.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/107648.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107648.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/107648.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/107648.html</trackback:ping><description><![CDATA[a=Movie.find(1)<br />a=Movie.find_by_name("g")<br />a=Comment.find(:all,:conditions=&gt;"comment like '%thi%'")<br /><img src ="http://www.blogjava.net/zhaijianhui/aggbug/107648.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2007-03-31 16:17 <a href="http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107648.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 表与表关系</title><link>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107646.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sat, 31 Mar 2007 08:08:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107646.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/107646.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107646.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/107646.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/107646.html</trackback:ping><description><![CDATA[ruby里的表对应的三关系:<br />在mysql里创建两张表<br />mysql&gt; create table invoices(<br />    -&gt; id int primary key auto_increment,<br />    -&gt; order_id int,<br />    -&gt; created_at timestamp<br />    -&gt; );<br />Query OK, 0 rows affected (0.28 sec)<br /><br />mysql&gt; create table orders(<br />    -&gt; id int primary key auto_increment,<br />    -&gt; company varchar(30)<br />    -&gt; );<br />Query OK, 0 rows affected (0.23 sec)<br />(1)one to one relationShip:<br />   order.rb<br />   class Order &lt; ActiveRecord::Base<br />   has_one:invoice<br />   end<br /><br />   invoice.rb<br />   class Invoice &lt; ActiveRecord::Base<br />    belongs_to:order<br />   end<br /><br /><font color="#0000ff">   D:\ruby\mytest\mytest1&gt;ruby script\console<br />   Loading development environment.<br />   &gt;&gt; order=Order.new<br />   =&gt; #&lt;Order:0x4872e78 @new_record=true, @attributes={"company"=&gt;nil}&gt;<br />   &gt;&gt; order.company="Big Corp"<br />   =&gt; "Big Corp"<br />   &gt;&gt; order.save<br />   =&gt; true<br /><br />   &gt;&gt; invoice=Invoice.new<br />   =&gt; #&lt;Invoice:0x485c5ec @new_record=true, @attributes={"order_id"=&gt;nil, "created_<br />   at"=&gt;nil}&gt;<br />   &gt;&gt; order.invoice=invoice<br />   =&gt; #&lt;Invoice:0x485c5ec @errors=#&lt;ActiveRecord::Errors:0x4858730 @errors={}, @bas<br />   e=#&lt;Invoice:0x485c5ec ...&gt;&gt;, @new_record=false, @attributes={"order_id"=&gt;1, "id"<br />   =&gt;1, "created_at"=&gt;Sat Mar 31 14:41:32 +0800 2007}&gt;<br />   &gt;&gt;<br /><br /><font color="#000000">(2)one to many<br />  mysql&gt; create table comments<br />    -&gt; (<br />    -&gt; id int primary key auto_increment,<br />    -&gt; comment varchar(5000),<br />    -&gt; created_at timestamp,<br />    -&gt; updated_at timestamp<br />    -&gt; );<br />Query OK, 0 rows affected (0.31 sec)<br /><br />mysql&gt; alter table comments add critic_id int;<br />Query OK, 0 rows affected (0.42 sec)<br />Records: 0  Duplicates: 0  Warnings: 0<br /><br />mysql&gt; create table critics<br />    -&gt; (<br />    -&gt; id  int primary key auto_increment,<br />    -&gt; firstname varchar(30),<br />    -&gt; lastname varchar(30),<br />    -&gt; email varchar(30)<br />    -&gt; );<br />Query OK, 0 rows affected (0.11 sec)<br /><br />class Critic &lt; ActiveRecord::Base<br />  has_many:comment<br />end<br /><br />class Comment &lt; ActiveRecord::Base<br />  belongs_to:critic<br />end<br /><br /><font color="#ff1493">D:\ruby\mytest\mytest1&gt;ruby script\console<br />Loading development environment.<br />&gt;&gt; a_critic=Critic.new<br />=&gt; #&lt;Critic:0x486ffd4 @new_record=true, @attributes={"lastname"=&gt;nil, "firstname<br />"=&gt;nil, "email"=&gt;nil}&gt;<br />&gt;&gt; a_critic.lastname="adm"<br />=&gt; "adm"<br />&gt;&gt; a_critic.save<br />=&gt; true<br />&gt;&gt; a_comment=Comment.new<br />=&gt; #&lt;Comment:0x485a1fc @new_record=true, @attributes={"updated_at"=&gt;nil, "critic<br />_id"=&gt;nil, "comment"=&gt;nil, "created_at"=&gt;nil}&gt;<br />&gt;&gt; a_comment.comment="this is a movie"<br />=&gt; "this is a movie"<br />&gt;&gt; a_critic.comment&lt;&lt;a_comment</font><br /><br />(3)many to many<br />   有三张表table1s ,table1s_table2s,table2s<br />   分别在table1.rb,table2.rb增加下面的语句<br />   has_and_belongs_to_many:table1;<br />   </font></font><font color="#0000ff"><font color="#000000"> has_and_belongs_to_many:table2</font></font><br /><font color="#0000ff">操作与(2)相似<br /></font><img src ="http://www.blogjava.net/zhaijianhui/aggbug/107646.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2007-03-31 16:08 <a href="http://www.blogjava.net/zhaijianhui/archive/2007/03/31/107646.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用scoffold小记</title><link>http://www.blogjava.net/zhaijianhui/archive/2007/03/24/106087.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sat, 24 Mar 2007 10:40:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2007/03/24/106087.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/106087.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2007/03/24/106087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/106087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/106087.html</trackback:ping><description><![CDATA[
		<div align="left">
				<font size="4">只适用于window平台:<br />假设之前你已经装好了ruby,rails,mysql<br />1)  启动mysql<br />    <b>d:\&gt;net start mysql</b><br />2)  优化mysql<br />    <b>d:\&gt;gem install mysql</b><br />这会提示出很多版本,确保你选择的是高版本而且是以(mswin32)结尾的产品<br />3)  创建rails项目<br />    <b>d:\&gt;rails cookbook<br />    </b>进入cookbook目录<br />    这样子默认使用的是mysql数据库,如果想使用PostgreSQL,<br />    就要这样子指定它创建项目了d:&gt;rails cookbook --database=postgresql
<br />    <b>d:\&gt;cd cookbook<br /></b>4)  数据库test创建表languages,我的数据库的用户名是root,密码是root<br />    我们使用rails创建表<br />    1:打开cookbook\config\database.yml修改为<br /></font>
				<blockquote>
						<font size="4">    development:<br />  adapter: mysql<br />  database: test<br />  username: root<br />  password: root<br />  host: localhost<br /><br /># Warning: The database defined as 'test' will be erased and<br /># re-generated from your development database when you run 'rake'.<br /># Do not set this db to the same as development or production.<br />test:<br />  adapter: mysql<br />  database: cookbook_test<br />  username: root<br />  password: root<br />  host: localhost<br /><br />production:<br />  adapter: mysql<br />  database: cookbook_production<br />  username: root<br />  password: root<br />  host: localhost<br />2:创建一个migration脚本<br />  d:\cookbokk&gt;<b>ruby script/generate migration build_db</b><br />  打开<span class="docEmphasis">db/migrate/001_build_db.rb<br />  修改如下:<br /></span></font>
						<blockquote>
								<font size="4">
										<span class="docEmphasis">  class BuildDb &lt; ActiveRecord::Migration<br />  def self.up<br />    create_table :languages,:force=&gt;true do |t|<br />                      t.column :name,:string<br />                      t.column :description,:string<br />    end<br />  end<br /><br />  def self.down<br />    drop_table :languages<br />  end<br />end<br /></span>
								</font>
						</blockquote>
						<font size="4">
								<span class="docEmphasis">3:执行d:\cookbook&gt;</span>
								<b>rake db:migrate</b>
								<br />  这时你的数据库表应该创建了<br /><br />5)有两种方式创建scaffolding<br /> <b>&lt;第一种方式&gt;</b><br />  1)<b>ruby script/generate model language</b><br />  2)<b>ruby script/generate controller language</b><br />  3)修改这个文件为如下内容app/controllers/language_controller.rb:<br /><br />    class LanguageController &lt; ApplicationController<br />    scaffold :languages<br />    end<br /></font>
						<blockquote>
								<pre>
										<font size="4">
												<br />
										</font>
								</pre>
						</blockquote>
						<font size="4"> 4)启动服务器<b>ruby script/server</b><br /><b></b>5)访问http://localhost:3000/languages<br /><br /><b>&lt;第二种方式&gt;</b><br /></font>1)<b>ruby script/generate scaffold language</b><br /><pre><font size="4">2) 启动服务器<b>ruby script/server</b><br />3)访问http://localhost:3000/languages<br /></font></pre><font size="4"><span class="docEmphasis"></span></font></blockquote>
		</div>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/106087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2007-03-24 18:40 <a href="http://www.blogjava.net/zhaijianhui/archive/2007/03/24/106087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tiles support in MyFaces </title><link>http://www.blogjava.net/zhaijianhui/archive/2006/09/25/71629.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Sun, 24 Sep 2006 21:39:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/09/25/71629.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/71629.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/09/25/71629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/71629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/71629.html</trackback:ping><description><![CDATA[
		<h1>Tiles support </h1>
		<br />For better <a class="wiki" href="http://struts.apache.org/" target="_blank">struts/tiles</a> support, myfaces has an integrated JspTilesViewHandler (since release 1.0.6 bate). The main advantage of the ViewHandler is, that tiles-definitions can be sourced out into xml files (up to now using tiles and myfaces you had to definie the layout within jsp-pages). <br /><br />Have a look at the tiles-webapp example. <br /><br /><h2>Steps to implement a myfaces-tiles application: </h2><br />1) configure the JspTilesViewHandler in your faces-config: <br />&lt;application&gt; <br /><font face="courier" size="2">   &lt;view-handler&gt;net.sourceforge.myfaces.application.jsp.JspTilesViewHandlerImpl&lt;/view-handler&gt; </font><br />&lt;/application&gt; <br /><br />2) add the following lines to your web.xml <br />&lt;context-param&gt; <br /><font face="courier" size="2">   &lt;param-name&gt;tiles-definitions&lt;/param-name&gt; </font><br /><font face="courier" size="2">   &lt;param-value&gt;/WEB-INF/tiles.xml&lt;/param-value&gt; </font><br />&lt;/context-param&gt; <br /><br />3) define your layout in a tiles-definition file (<a class="wiki" title="no description" href="http://www.marinschek.com/myfaces/tiki/tiki-index.php?page=TilesSampleXml">sample</a> from the tiles-webapp). <br /><br />When rendering the view, the JspTilesViewHandlerImpl will take the given viewId and compute a tileId by <br /><ul><li>substituting any extension by ".tiles" 
</li><li>appending ".tiles" if path-mapping is used </li></ul>Next the ViewHanlder looks up in the tile-definitions for the corresponding definition. <br />(eg. for viewId = /page1.jsp the lookup would be /page1.tiles) <br /><br />By the way, the JspTilesViewHandlerImpl is part of the myfaces-components. So someone could use it with Sun's RI too. <br />==================================================================<br />&lt;!DOCTYPE tiles-definitions PUBLIC <br /><font face="courier" size="2"> "-//Apache Software Foundation//DTD Tiles Configuration//EN" </font><br /><font face="courier" size="2"> "http://jakarta.apache.org/struts/dtds/tiles-config.dtd"&gt; </font><br /><br />&lt;tiles-definitions&gt; <br /><font face="courier" size="2">   &lt;definition name="layout.example" path="/template/template.jsp" &gt; </font><br /><font face="courier" size="2">       &lt;put name="header" value="/common/header.jsp" /&gt; </font><br /><font face="courier" size="2">       &lt;put name="menu" value="/common/navigation.jsp" /&gt; </font><br /><font face="courier" size="2">   &lt;/definition&gt; </font><br /><br /><font face="courier" size="2">   &lt;definition name="/page1.tiles" extends="layout.example" &gt; </font><br /><font face="courier" size="2">       &lt;put name="body" value="/page1.jsp" /&gt; </font><br /><font face="courier" size="2">   &lt;/definition&gt; </font><br /><br /><font face="courier" size="2">   &lt;definition name="/page2.tiles" extends="layout.example" &gt; </font><br /><font face="courier" size="2">       &lt;put name="body" value="/page2.jsp" /&gt; </font><br /><font face="courier" size="2">   &lt;/definition&gt; </font><br /><br />&lt;/tiles-definitions&gt; <br /><br /><br /><a href="http://www.marinschek.com/myfaces/tiki/tiki-index.php?page=Features">http://www.marinschek.com/myfaces/tiki/tiki-index.php?page=Features</a><img src ="http://www.blogjava.net/zhaijianhui/aggbug/71629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-09-25 05:39 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/09/25/71629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork使用spring ioc集成</title><link>http://www.blogjava.net/zhaijianhui/archive/2006/08/03/61441.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Wed, 02 Aug 2006 23:29:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/08/03/61441.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/61441.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/08/03/61441.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/61441.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/61441.html</trackback:ping><description><![CDATA[
		<p>
				<span class="postbody">
						<font size="1">在WebWork 2.2.x 之后,它将直接内建支持spring ioc了,所以更加简单了,,<br />做个例子<br />第一步:在web-inf下建一个webwork.properties文件,<br />内容为<br />webwork.objectFactory = spring<br />第二步:也就是加载applicationContext.xml,可以采取前面前的两种之一,,这里采用后面那种<br />&lt;listener&gt;<br />  &lt;listener-class&gt;<br />   org.springframework.web.context.ContextLoaderListener<br />  &lt;/listener-class&gt;<br /> &lt;/listener&gt;<br />第三步:创建要装载的实例,在applicationContext.xml(采用监听的方式,记住默认的位置是在web-inf下面)<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd">http://www.springframework.org/dtd/spring-beans.dtd</a>"&gt;</font>
				</span>
		</p>
		<p>
				<span class="postbody">
						<font size="1">&lt;beans default-autowire="autodetect"&gt; &lt;!--记注一定要加上--&gt;<br />  &lt;bean id="userManager" singleton="true" class="helloWorld.UserManager"/&gt; <br />&lt;/beans&gt;<br />第四步:在修改我原来的例子<br />HelloWorldAction.java<br />为<br />package helloWorld;<br />import com.opensymphony.xwork.ActionSupport;<br />public class HelloWorldAction extends ActionSupport{</font>
				</span>
		</p>
		<p>
				<span class="postbody">
						<font size="1">    String greeting;<br />    UserManager userManager;<br />    public void setGreeting(String greeting) {<br />        this.greeting = greeting;<br />    }</font>
				</span>
		</p>
		<p>
				<span class="postbody">
						<font size="1">    public String getGreeting() {<br />        return greeting;<br />    }<br />    public UserManager getUserManager() {<br />  return userManager;<br /> }</font>
				</span>
		</p>
		<p>
				<span class="postbody">
						<font size="1"> public void setUserManager(UserManager userManager) {<br />  this.userManager = userManager;<br /> }</font>
				</span>
		</p>
		<p>
				<span class="postbody">
						<font size="1"> public String execute() throws Exception {<br />  userManager.sayHello();<br />  System.out.println("after userManager.sayHello()");<br />        if (greeting.equals("") || greeting == null) {<br />            addFieldError("greeting", getText("greeting"));<br />            return ERROR;<br />        }<br />        return SUCCESS;<br />    }<br />}<br />而UserManager.java类如下<br />package helloWorld;<br /></font>
				</span>
				<span class="postbody">
						<font size="1">public class UserManager {<br /> public UserManager()<br /> {<br />  System.out.println("create instance of UserManger");<br /> }<br /> public void sayHello()<br /> {<br />  System.out.println("hello zjh");<br /> }<br />}<br />再访问<a href="http://localhost:8080/WebWork/index.jsp">http://localhost:8080/WebWork/index.jsp</a>提交后在tomcat console窗口打印出<br />hello zjh<br />after userManager.sayHello()</font>
				</span>
		</p>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/61441.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-08-03 07:29 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/08/03/61441.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring集成到web框架</title><link>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61423.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Wed, 02 Aug 2006 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61423.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/61423.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/61423.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/61423.html</trackback:ping><description><![CDATA[
		<p>把spring集成到web框架很简单，只要在web.xml里面加上<br />&lt;context-param&gt;<br />    &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />    &lt;param-value&gt;/WEB-INF/applicationContext*.xml&lt;/param-value&gt;<br />&lt;/context-param&gt;<br />或者<br />&lt;listener&gt;<br />    &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;<br />&lt;/listener&gt;<br />如果为下面这种方式的话，那么就是加载默认的文件<br /><em><span class="emphasis">/WEB-INF/applicationContext.xml<br /></span>这个在<br /></em>org.springframework.web.context.support.XmlWebApplicationContext类里面定义的,,部分代码：<br />/** Default config location for the root context */<br /> public static final String DEFAULT_CONFIG_LOCATION = "/WEB-INF/applicationContext.xml";</p>
		<p> /** Default prefix for building a config location for a namespace */<br /> public static final String DEFAULT_CONFIG_LOCATION_PREFIX = "/WEB-INF/";</p>
		<p> /** Default suffix for building a config location for a namespace */<br /> public static final String DEFAULT_CONFIG_LOCATION_SUFFIX = ".xml";<br /><br /><br />Once the context files are loaded, Spring creates a <a href="http://www.springframework.org/docs/api/org/springframework/web/context/WebApplicationContext.html" target="_top"><tt class="literal"><font color="#002c99">WebApplicationContext</font></tt></a> object based on the bean definitions and puts it into the <tt class="literal">ServletContext</tt>.<br />这样我们就可以直接用ServletContext获取自己想要的参数的，，<br /></p>
		<p>All Java web frameworks are built on top of the Servlet API, so you can use the following code to get the <tt class="literal">ApplicationContext</tt> that Spring created.</p>
		<pre class="programlisting">WebApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);</pre>
		<p>通过WebApplicationContext我们就可以通过bean的名字获取它的实例了<br />The <a href="http://www.springframework.org/docs/api/org/springframework/web/context/support/WebApplicationContextUtils.html" target="_top"><tt class="literal"><font color="#002c99">WebApplicationContextUtils</font></tt></a> class is for convenience, so you don't have to remember the name of the <tt class="literal">ServletContext</tt> attribute. Its <span class="emphasis"><em>getWebApplicationContext()</em></span> method will return null if an object doesn't exist under the <tt class="literal">WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE</tt> key. Rather than risk getting NullPointerExceptions in your application, it's better to use the <span class="emphasis"><em>getRequiredWebApplicationContext()</em></span> method. This method throws an Exception when the <span class="emphasis"><em>ApplicationContext</em></span> is missing.</p>
		<p>Once you have a reference to the <tt class="literal">WebApplicationContext</tt>, you can retrieve beans by their name or type. Most developers retrieve beans by name, then cast them to one of their implemented interfaces.</p>
		<p>Fortunately, most of the frameworks in this section have simpler ways of looking up beans. Not only do they make it easy to get beans from the <tt class="literal">BeanFactory</tt>, but they also allow you to use dependency injection on their controllers. Each framework section has more detail on its specific integration strategies.</p>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/61423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-08-02 23:41 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork 学习二(validation验证框架)</title><link>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61406.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Wed, 02 Aug 2006 14:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61406.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/61406.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61406.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/61406.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/61406.html</trackback:ping><description><![CDATA[webwork使用 validation验证框架，其采用的是拦截器<br />看一个例子:<br /><div class="O" style="tab-interval: .4913in" v:shape="_x0000_s1026"><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b>SimpleAction-validation.xml 名字前缀要与类名相同，而且与之在同一目录下</b></span><br />&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0//EN" "<a href="http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd</a>"&gt;<br />&lt;validators&gt;<br />    &lt;field name="count"&gt;<br />        &lt;field-validator type="required"&gt;<br />            &lt;message&gt;You must enter a value for count.&lt;/message&gt;<br />        &lt;/field-validator&gt;<br />        &lt;field-validator type="int"&gt;<br />            &lt;param name="min"&gt;0&lt;/param&gt;<br />            &lt;param name="max"&gt;5&lt;/param&gt;<br />            &lt;message&gt;<br />    count must be between ${min} and ${max}, current value is ${count}.<br />     &lt;/message&gt;<br />        &lt;/field-validator&gt;<br />    &lt;/field&gt;<br />&lt;/validators&gt;<br />==<br />package helloWorld;<br />import com.opensymphony.xwork.ActionSupport;<br />import com.opensymphony.xwork.ValidationAware;</div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">public class SimpleAction extends ActionSupport implements ValidationAware {</div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    private int count;</div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public void setCount(int count) {<br />        this.count = count;<br />    }</div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public int getCount() {<br />        return count;<br />    }</div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public String doExecute() throws Exception {<br />   return SUCCESS;<br />    }<br />}<br />------<br />在xwork.xml里面添加<br />&lt;interceptors&gt;<br /> &lt;interceptor name="validator" class="com.opensymphony.xwork.validator.ValidationInterceptor"/&gt;<br /> &lt;/interceptors&gt;<br />&lt;action name="validation" class="helloWorld.SimpleAction"&gt;<br />   &lt;result name="success" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/simple_result.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;result name="error" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/simple.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;!-- If you don't override execute(), you must do this: --&gt;<br />   &lt;result name="input" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/simple.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;interceptor-ref name="validator" /&gt;<br />   &lt;interceptor-ref name="debugStack" /&gt;<br />   &lt;interceptor-ref name="defaultStack" /&gt;<br />   <br />  &lt;/action&gt;<br />注意interceptor为多个时与servlet里面的filter一样按顺序依次传递,假若失败就为影响后面的程序运行效果.<br />还有两个jsp页面<br />simple_result.jsp<br />&lt;%@ taglib prefix="ww" uri="webwork"%&gt;<br />&lt;html&gt;<br /> &lt;head&gt;<br />  &lt;title&gt;WebWork Validation Example&lt;/title&gt;<br /> &lt;/head&gt;<br /> &lt;body&gt;<br />  &lt;p&gt;<br />   The count is<br />   &lt;ww:property value="count" /&gt;<br />  &lt;/p&gt;<br />  &lt;/form&gt;<br /> &lt;/body&gt;<br />&lt;/html&gt;<br />--<br />simple.jsp<br />&lt;%@ taglib prefix="ui" uri="webwork" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />    &lt;title&gt;WebWork Validation Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form action="validation.action" method="post"&gt;<br />&lt;table&gt;<br />     &lt;ui:textfield label="Set the counter" name="count"/&gt;<br />    &lt;ui:submit value="'Submit'"/&gt;<br />&lt;/table&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />运行效果如下<br /><table><tbody><tr errorfor="count"><td valign="top" align="middle" colspan="2"><span class="errorMessage">count must be between 0 and 5, current value is 8. </span></td></tr><tr><td class="tdLabel"><label class="errorLabel" for="count">Set the counter:</label></td><td><input id="count" value="8" name="count" /></td></tr><tr><td colspan="2"><div align="right"><input type="submit" value="'Submit'" /></div></td></tr></tbody></table><br />下面为日期类型的验证<br /><div style="tab-interval: .4913in" v:shape="_x0000_s1026"><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><font face="Times New Roman"></font><span style="WIDTH: 3.69%; mso-tab-count: 1"></span>&lt;field-validator type="date"&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 5.8%; mso-tab-count: 2"></span>&lt;param name="min"&gt;12/22/2002&lt;/param&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 3.69%; mso-tab-count: 1"></span><span style="mso-spacerun: yes">  </span>&lt;param name="max"&gt;12/25/2002&lt;/param&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">  </span><span style="WIDTH: 3.1%; mso-tab-count: 2"></span>&lt;message&gt;The date must be between 12-22-2002 and 12-25-2002.&lt;/message&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 3.69%; mso-tab-count: 1"></span>&lt;/field-validator&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/field&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;field name="foo"&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 3.69%; mso-tab-count: 1"></span>&lt;field-validator type="int"&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 5.8%; mso-tab-count: 2"></span>&lt;param name="min"&gt;0&lt;/param&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 5.8%; mso-tab-count: 2"></span>&lt;param name="max"&gt;100&lt;/param&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 5.8%; mso-tab-count: 2"></span>&lt;message key="foo.range"&gt;Could not find foo.range!&lt;/message&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 3.69%; mso-tab-count: 1"></span>&lt;/field-validator&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/field&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/validators&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><b></b></span></div><div class="O" style="mso-line-spacing: '100 50 0'; mso-margin-left-alt: 213"></div></div><br /></div></div><img src ="http://www.blogjava.net/zhaijianhui/aggbug/61406.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-08-02 22:10 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61406.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>webwork学习一</title><link>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61377.html</link><dc:creator>蜘蛛</dc:creator><author>蜘蛛</author><pubDate>Wed, 02 Aug 2006 11:02:00 GMT</pubDate><guid>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61377.html</guid><wfw:comment>http://www.blogjava.net/zhaijianhui/comments/61377.html</wfw:comment><comments>http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61377.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhaijianhui/comments/commentRss/61377.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhaijianhui/services/trackbacks/61377.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: NewBaskerville-Roman; mso-hansi-font-family: NewBaskerville-Roman; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">本地中文化网址</span>
				<span lang="EN-US" style="FONT-FAMILY: NewBaskerville-Roman; mso-bidi-font-size: 10.5pt; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: NewBaskerville-Roman; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">
						<a href="http://wiki.javascud.org/display/ww2cndoc/Home">http://wiki.javascud.org/display/ww2cndoc/Home</a>
						<br />
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span style="FONT-SIZE: 10pt; FONT-FAMILY: 宋体; mso-ascii-font-family: NewBaskerville-Roman; mso-hansi-font-family: NewBaskerville-Roman; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">在线文档</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: NewBaskerville-Roman; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
						<font size="3">http://www.opensymphony.com/webwork/wikidocs</font>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">与</span>
						<span lang="EN-US">struts</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的区别有实现国级化的时候，</span>
						<span lang="EN-US">struts</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
						<span lang="EN-US">message</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">只能出现</span>
						<span lang="EN-US">5</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">个动态的值</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="3">也就像下面的信息</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">Your {0} ticket(s) for flight {1} have been booked.<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">The total cost is {2}. Your confirmation number is {3}.<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">Your flight leaves at {4} and arrives at {5}</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="3">需要分成两段才能完成</font>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;bean:message key="confirmation.msg1"<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">arg0="count" arg1="flightNumber" arg2="cost"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;bean:message key="confirmation.msg2"<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">arg0="confirmation" arg1="departure" arg2="arrival"/&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<font size="3">
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而</span>
						<span lang="EN-US">webwork</span>
						<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是无限制的，像上面的可以写成这样子</span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:text name="confirmation.msg"&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="count"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="flightNumber"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="cost"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="confirmation"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="departure"/&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;ww:param value="arrival"/&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;/ww:text&gt;</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">还有在web.xml里同指定webwork的tld所在位置<br /></p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;taglib&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;taglib-uri&gt;webwork&lt;/taglib-uri&gt;<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;taglib-location&gt;<br />/WEB-INF/lib/webwork-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /?><st1:chsdate w:st="on" isrocdate="False" islunardate="False" day="30" month="12" year="1899">2.1.7</st1:chsdate>.jar<o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align="left">
				<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;/taglib-location&gt;<o:p></o:p></span>
		</p>
		<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">
				<p class="MsoNormal" style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 0cm; MARGIN: 0cm 0cm 0pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: medium none; TEXT-ALIGN: left; mso-layout-grid-align: none; mso-border-bottom-alt: solid windowtext .75pt; mso-padding-alt: 0cm 0cm 1.0pt 0cm" align="left">
						<span lang="EN-US" style="FONT-SIZE: 8pt; FONT-FAMILY: Courier; mso-bidi-font-family: Courier; mso-font-kerning: 0pt">&lt;/taglib&gt;<br />在很多书上都讲上面可行，可是我却报下面的错．．．换成下面那种方式就ok了<br /></span>
						<span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: NewBaskerville-Roman; mso-bidi-font-family: NewBaskerville-Roman; mso-font-kerning: 0pt">
								<o:p>
								</o:p>
						</span>
				</p>org.apache.jasper.JasperException: Unable to initialize TldLocationsCache: null<br />也可以指定webwork.tld所在的位置也可以，，如<br />/WEB-INF/webwork.tld(webwork.tld拷到这下面来).<br /><br />一个简单的例子<br /> 
<div class="O" style="tab-interval: .4913in" v:shape="_x0000_s1026"><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">import com.opensymphony.xwork.Action; </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">public class HelloWorldAction implements Action{ </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>String greeting; </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>public String getGreeting() { </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">        </span>return greeting; </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>} </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>public String execute() throws Exception { </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">        </span>greeting = "Hello World!"; </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">        </span>return SUCCESS; </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>} </span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">} </span></div><div style="mso-line-spacing: '100 50 0'; mso-margin-left-alt: 213"></div></div>实现的action接口里面只有一个方法<br /> 
<div style="tab-interval: .4913in" v:shape="_x0000_s1026"><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">interface Action { </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 4.78%; mso-tab-count: 1"></span>String </span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">execute() </span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">throws Exception; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">}</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: navy; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><b></b></span></div><div class="O" style="mso-line-spacing: '100 50 0'; mso-margin-left-alt: 213"></div></div><div style="tab-interval: .4913in" v:shape="_x0000_s1026"><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b>greetings.jsp </b></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b></b></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;%@ taglib prefix="ww" uri="webwork" %&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;html&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;head&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="mso-spacerun: yes">    </span>&lt;title&gt;First WebWork Example&lt;/title&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/head&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;body&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;p&gt;&lt;ww:property value="greeting"/&gt;&lt;/p&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/body&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/html&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b>xwork.xml 放到就用的classpath下面(也就web-inf/classes下面)</b></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b></b></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;action name="hello" class="HelloWorldAction"&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;result name="success" type="dispatcher"&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><span style="WIDTH: 4.39%; mso-tab-count: 1"></span>&lt;param name="location"&gt;/greetings.jsp&lt;/param&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/result&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;interceptor-ref name="debugStack"/&gt; </span></div><div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;interceptor-ref name="defaultStack"/&gt; </span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'">&lt;/action&gt; </span></div><div class="O" style="mso-line-spacing: '100 50 0'; mso-margin-left-alt: 213"></div></div>还有在web.xml里面加上webwork的一个加载类<br />&lt;servlet&gt;<br />        &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;com.opensymphony.webwork.dispatcher.ServletDispatcher&lt;/servlet-class&gt;<br />    &lt;/servlet&gt;</div>
		<div style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0cm; BORDER-TOP: medium none; PADDING-LEFT: 0cm; PADDING-BOTTOM: 1pt; BORDER-LEFT: medium none; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; mso-element: para-border-div; mso-border-bottom-alt: solid windowtext .75pt">    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;action&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;*.action&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br /></div>
		<div class="O" style="tab-interval: .4913in; mso-margin-left-alt: 213" v:shape="_x0000_s1026">
				<span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
						<strong>ActionSupport<br /></strong>
						<div style="tab-interval: .4913in" v:shape="_x0000_s1026">
								<div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>1:提供对错误信息的支持</strong>
										</span>
								</div>
								<div class="O2" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 720; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana">
												<span style="LEFT: -4.04%; POSITION: absolute; mso-special-format: bullet">
														<strong>•</strong>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>action and field specific errors </strong>
										</span>
								</div>
								<div class="O2" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 720; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana">
												<span style="LEFT: -4.04%; POSITION: absolute; mso-special-format: bullet">
														<strong>•</strong>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>field errors are automatically supported by views </strong>
										</span>
								</div>
								<div class="O2" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 720; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
										</span>
								</div>
								<div class="O1" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 465; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana">
												<span style="LEFT: -4.58%; POSITION: absolute; mso-special-format: bullet">
														<strong>–</strong>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>2:国际化的支持<br /></strong>
										</span>
								</div>
								<div class="O2" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 720; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana">
												<span style="LEFT: -4.04%; POSITION: absolute; mso-special-format: bullet">
														<strong>•</strong>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>1 resource bundle per action </strong>
										</span>
								</div>
								<div class="O2" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 720; mso-char-wrap: 1; mso-kinsoku-overflow: 1">
										<span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana">
												<span style="LEFT: -4.04%; POSITION: absolute; mso-special-format: bullet">
														<strong>•</strong>
												</span>
										</span>
										<span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">
												<strong>pervasive UI support for retrieving messages<br /></strong> --------------------------------------------------------------------------------
<div class="O" style="tab-interval: .4913in" v:shape="_x0000_s1026"><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong>ActionSupport Example: </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong>import com.opensymphony.xwork.ActionSupport; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong>public class HelloWorldAction extends ActionSupport{ </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>String greeting; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>public void setGreeting(String greeting) { </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">        </span>this.greeting = greeting; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>} </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>public String getGreeting() { </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">        </span>return greeting; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>} </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>public String execute() throws Exception { </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">        </span>if (greeting.equals("") || greeting == null) { </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">            </span>addFieldError("greeting", getText("greeting")); </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">            </span>return ERROR; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">        </span>} </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">        </span>return SUCCESS; </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong><span style="mso-spacerun: yes">    </span>} </strong></span></div><div style="mso-line-spacing: '90 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-ascii-font-family: 'Courier New'; mso-bidi-font-family: 'Lucida Sans Unicode'"><strong>} </strong></span></div><div style="mso-line-spacing: '90 50 0'; mso-margin-left-alt: 213">这里的getText("greeting")的greeting要与<strong><font face="Courier New">HelloWorldAction.properties(放在与HelloWorldAction.class同级目录下面，名称也一样)里的greeting=Enter your greeting please相同<br />上面的set.get其实与struts当中的ActionFrom类似．．<br />&lt;%@ page language="java" import="java.util.*" pageEncoding="gbk"%&gt;<br />&lt;%@ taglib prefix="ui" uri="webwork" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />    &lt;title&gt;First WebWork Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form action="hello.action" method="post"&gt;<br />&lt;table&gt;<br />    &lt;ui:textfield label="欢迎语句" name="greeting"/&gt;<br />    &lt;ui:submit value="'Submit'"/&gt;<br />&lt;/table&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />这里的greeting要与HelloWorldActio.java里的属性一致<br />如出现错误会显示在当前页，<br /><table><tbody><tr errorfor="greeting"><td valign="top" align="middle" colspan="2"><span class="errorMessage">Enter your greeting please</span></td></tr><tr><td class="tdLabel"><label class="errorLabel" for="greeting">欢迎语句:</label></td><td><input id="greeting" name="greeting" /></td></tr><tr><td colspan="2"><div align="right"><input type="submit" value="'Submit'" /></div></td></tr></tbody></table><br />如填上内容，就会相应的调用setGreeting()方法的．．<br />&lt;%@ taglib prefix="ww" uri="webwork" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />    &lt;title&gt;First WebWork Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;p&gt;&lt;ww:property value="greeting"/&gt;&lt;/p&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />把填的内容显示出来<br />在xwork.xml里的&lt;action&gt;<br />也相应的变成<br />&lt;action name="hello" class="helloWorld.HelloWorldAction"&gt;<br />   &lt;result name="success" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/greetings.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;result name="error" type="dispatcher"&gt;<br />          &lt;param name="location"&gt;/index.jsp&lt;/param&gt;<br />            &lt;/result&gt;<br />  &lt;/action&gt;<br />------------------------------------------------------------<br /> 
<div style="tab-interval: .4913in" v:shape="_x0000_s1026"><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b>Model-Driven Actions vs. Field-Driven Actions </b></span></div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span lang="EN-CA" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 'Lucida Sans Unicode'; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'"><b></b></span></div><span style="FONT-SIZE: 67%; FONT-FAMILY: Verdana"><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><span style="LEFT: -4.72%; POSITION: absolute; mso-special-format: bullet">•</span></div></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Verdana; mso-ascii-font-family: Verdana; mso-bidi-font-family: 'Lucida Sans Unicode'">2 types of Actions possible: <br /></span>(1)Field-Drivern上面的例子就是<br />(2)ModelDriven<br />package helloWorld;</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">public class Pet {<br />    private long id;<br /> private String name;</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public long getId() {<br />        return id;<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public void setId(long id) {<br />        this.id = id;<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public String getName() {<br />        return name;<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public void setName(String name) {<br />        this.name = name;<br />    }<br />}<br />--<br />package helloWorld;<br />import com.opensymphony.xwork.*;</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">public class AddPetAction extends ActionSupport implements ModelDriven{<br /> Pet pet = new Pet();</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public Object getModel() {<br />        return pet;<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    protected void doValidation() {<br />        if (pet.getId() == 0) {<br />            addFieldError("id", "Please enter in an id number for you new Pet.");<br />        }<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1">    public String doExecute() throws Exception {<br />        if (hasErrors())<br />            return ERROR;<br />        return SUCCESS;<br />    }</div><div class="O" style="mso-line-spacing: '100 -24 0'; mso-margin-left-alt: 213; mso-char-wrap: 1; mso-kinsoku-overflow: 1"><br />}<br />需实现ModelDriven这个接口，它也只有一个方法<br />public Object getModel();<br /> 在xwork.xml加上<br />&lt;action name="addpet" class="helloWorld.AddPetAction"&gt;<br />   &lt;result name="success" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/petadded.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;result name="error" type="dispatcher"&gt;<br />    &lt;param name="location"&gt;/addpet.jsp&lt;/param&gt;<br />   &lt;/result&gt;<br />   &lt;interceptor-ref name="debugStack" /&gt;<br />   &lt;interceptor-ref name="defaultStack" /&gt;<br />  &lt;/action&gt;<br />还有两个页面分别用来添加和显示用的<br />&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;<br />&lt;%@ taglib prefix="ui" uri="webwork" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />    &lt;title&gt;First WebWork Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;form action="addpet.action" method="post"&gt;<br />&lt;table&gt;<br />    &lt;ui:textfield label="Pet ID Number" name="id"/&gt;<br />    &lt;ui:textfield label="Name of Pet" name="name"/&gt;<br />    &lt;ui:submit value="'Submit'"/&gt;<br />&lt;/table&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br />-------petadded.jsp<br />&lt;%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%&gt;<br />&lt;%@ taglib prefix="ww" uri="webwork" %&gt;<br />&lt;html&gt;<br />&lt;head&gt;<br />    &lt;title&gt;First WebWork Example&lt;/title&gt;<br />&lt;/head&gt;<br />&lt;body&gt;<br />&lt;p&gt;Added a pet with the following properties:&lt;/p&gt;<br />&lt;ul&gt;<br />    &lt;li&gt;ID: &lt;ww:property value="id"/&gt;&lt;/li&gt;<br />    &lt;li&gt;Name: &lt;ww:property value="name"/&gt;&lt;/li&gt;<br />&lt;/ul&gt;<br />&lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></div></font></strong></div></div></span>
								</div>
						</div>
				</span>
		</div>
<img src ="http://www.blogjava.net/zhaijianhui/aggbug/61377.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhaijianhui/" target="_blank">蜘蛛</a> 2006-08-02 19:02 <a href="http://www.blogjava.net/zhaijianhui/archive/2006/08/02/61377.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>