<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/feedsky8.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/zhlwish" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/zhlwish" type="application/rss+xml"></fs:self_link><lastBuildDate>Tue, 23 Feb 2010 13:46:46 GMT</lastBuildDate><title>没有比人更高的山</title><description>www.zhlwish.com</description><link>http://www.zhlwish.com</link><sy:updatePeriod>hourly</sy:updatePeriod><sy:updateFrequency>1</sy:updateFrequency><language>en</language><pubDate>Tue, 23 Feb 2010 13:46:46 GMT</pubDate><item><title>新的一年，做一个合格的被管理者</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321218/6047504/1/item.html</link><content:encoded>&lt;p&gt;到学校了，开始了新的学习和工作，心想这一年自己定个什么目标呢，在&lt;a href=&quot;http://t.sina.cn&quot;&gt;新浪微博&lt;/a&gt;上看到别人的一个转贴&lt;a href=&quot;http://blog.sina.com.cn/s/blog_486c0f670100h603.html&quot;&gt;《新年职场新十规》&lt;/a&gt;，瞄了一眼，感觉自己这些个方面还有点距离，不说合格的管理者，连被管理者都还不算合格。&lt;/p&gt;
&lt;p&gt;想起&lt;a href=&quot;http://rdc.taobao.com&quot;&gt;淘宝QA Team&lt;/a&gt;的一篇博文&lt;a href=&quot;http://rdc.taobao.com/blog/qa/?p=5550&quot;&gt;《如何做一个被管理者》&lt;/a&gt;，心想，我还是踏踏实实一步一个脚印先做一个合格的被管理者。顺便转发一下新浪网友的文章：&lt;/p&gt;
&lt;p&gt;1. Give your realistic deadlines­, Give yourself a bit of extra time to get the job done properly, and if you get things done early, the boss will be impressed.­&lt;br /&gt;
应当稍微高估完成既定任务需要花费的时间，并且，如果你“提前”完成任务，上司会对你印象深刻。­&lt;/p&gt;
&lt;p&gt;2. Get problems solved early­, Let your boss know immediately about any problems that crop up, he will be grateful if you give him enough time to solve it.­&lt;br /&gt;
提前解决问题­，出现任何突发问题都要立刻让上司知道，要是你给上司足够的时间来解决这些问题，他会对你心存感激。&lt;/p&gt;
&lt;p&gt;3. Don&amp;#8217;t be a yes /no man, be a good lieutenant.­ ­Offer polite, constructive criticism, and do your best to see how your boss&amp;#8217;s plans are feasible.­&lt;br /&gt;
不要做一个“唯唯诺诺者/否定论者”，做一个“优秀的中尉”。有礼貌地提出建设性意见，并尽可能看到上司方案的可行性。­&lt;/p&gt;
&lt;p&gt;4. Personal appearance is important­, Dress professionally, keep a breath mint and comb handy, and make a clean and well-organized work station.­&lt;br /&gt;
个人形象很重要­，永远专业着装、随身带薄荷糖和梳子，保持一个清洁并摆放整齐的工作场所。­&lt;/p&gt;
&lt;p&gt;5. Take the initiative, If you see there is room for improvement, write a proposal and float the idea to your boss.­&lt;br /&gt;
积极主动­，如果你发现可以改进的空间，那么写下建议并把想法告诉上司。­&lt;/p&gt;
&lt;p&gt;6. Respect your boss&amp;#8217;s time， Don&amp;#8217;t bother your boss if he is on phone or is elbows deep in work, and try to solve the problem if you can solve it yourself.­&lt;br /&gt;
­尊重上司的时间­，如果你的上司在打电话或者专心工作，最好重新考虑你要找他处理的问题的紧急程度，不要在你自己可以解决的小问题上浪费上司的时间。­&lt;/p&gt;
&lt;p&gt;7. Take on your boss&amp;#8217;s unpleasant tasks­, Volunteer to take on the nasty tasks that annoy your boss.­&lt;br /&gt;
接受上司指派的让人不愉快的任务­，主动接手这些任务，让你的上司从这些繁琐杂事中脱身而出。&lt;/p&gt;
&lt;p&gt;8. Speak up at meeting­, Try to have at least one well-informed opinion about the task at han.­&lt;br /&gt;
在会议上大声发言­，每次开会时，尽力对正在进行的任务提出至少一点可取的意见。­&lt;/p&gt;
&lt;p&gt;9. Put your boss at ease­, Make a note of anything you and the boss have in common, and conduct a good relationship with your boss and co-workers.­&lt;br /&gt;
让你的上司放松­，记下你与上司之间的所有共同点，并且与你的老板和同事建立融洽的关系。­&lt;/p&gt;
&lt;p&gt;10. Understand your shortcomings­ , Always be willing to learn a new skill to increase your personal effectives.­&lt;br /&gt;
认识自己的短处­，要永远乐于学习新技能，并提升你的工作效率。&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321218/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321218/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321218/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321218/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2010/02/23/new-year/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>到学校了，开始了新的学习和工作，心想这一年自己定个什么目标呢，在新浪微博上看到别人的一个转贴《新年职场新十规》，瞄了一眼，感觉自己这些个方面还有点距离，不说合格的管理者，连被管理者都还不算合格。
想起淘宝QA Team的一篇博文《如何做一个被管理者》，心想，我还是踏踏实实一步一个脚印先做一个合格的被管理者。顺便转发一下新浪网友的文章：
1. Give your realistic deadlines­, Give yourself a bit of extra time to get the job done properly, and if you get things done early, the boss will be impressed.­
应当稍微高估完成既定任务需要花费的时间，并且，如果你“提前”完成任务，上司会对你印象深刻。­
2. Get problems solved early­, Let your boss know immediately about any problems that crop up, he will be grateful if you give him enough [...]&lt;img src=&quot;http://www1.feedsky.com/t1/335321218/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321218/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321218/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321218/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>管理</category><category>生存</category><category>成长</category><pubDate>Tue, 23 Feb 2010 21:46:46 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2010/02/23/new-year/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=185</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2010/02/23/new-year/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321218/6047504</fs:itemid></item><item><title>一个隐藏了将近2年的Bug</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321219/6047504/1/item.html</link><content:encoded>&lt;p&gt;最近在维护&lt;a href=&quot;http://ei.hust.edu.cn/efile&quot;&gt;华中科技大学电信系的电子档案库&lt;/a&gt;，发现了一个隐藏了将近2年的Bug，记录如下：&lt;/p&gt;
&lt;p&gt;需求：一个科研项目有一定的工作量，而每个项目有很多参与人，需要为每个参与人设置其工作量分配额度。当用户添加了一个项目时，需要同时添加其参与人:&lt;/p&gt;
&lt;p&gt;实现：当用户录入了科研项目信息之后，点击“添加参与人”的按钮，转向到选择参与人的页面，可以勾选任意数目的参与人，点击“保存”按钮后返回科研项目信息页面。&lt;/p&gt;
&lt;p&gt;在执行保存选择的参与人信息时，检查所选择的人员是否已经在科研项目的参与人中存在的代码如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;for&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;Iterator&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;string&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; iterator &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; selectedMemberList.&lt;span style=&quot;color: #006633;&quot;&gt;iterator&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt; iterator.&lt;span style=&quot;color: #006633;&quot;&gt;hasNext&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
    ParticipatorBean participatorBean &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; ParticipatorBean&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;long&lt;/span&gt; teacherId &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Long&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;parseLong&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;iterator.&lt;span style=&quot;color: #006633;&quot;&gt;next&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    Teacherbasicinfo teacher &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; ServiceProvider.&lt;span style=&quot;color: #006633;&quot;&gt;getTeacherInfoService&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;findById&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;teacherId&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #003399;&quot;&gt;Long&lt;/span&gt; id &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; teacher.&lt;span style=&quot;color: #006633;&quot;&gt;getTeacherId&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    participatorBean.&lt;span style=&quot;color: #006633;&quot;&gt;setTeacherId&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    participatorBean.&lt;span style=&quot;color: #006633;&quot;&gt;setTeacherName&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;teacher.&lt;span style=&quot;color: #006633;&quot;&gt;getTeacherName&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;participatorsMap.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        participatorsMap.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;valueOf&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;valueOf&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        participators.&lt;span style=&quot;color: #006633;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;participatorBean&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;/&lt;/span&gt;string&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;其中，selectedMemberList是选中的用户列表，ParticipatorBean是用来传递给前一个页面的参与人的Java类，Teacherbasicinfo是领域模型，代表教师基本信息，老师编号teacherId为Long型。&lt;/p&gt;
&lt;p&gt;participatorsMap是我从来去除重复的一个HashMap&lt;string , String&gt;，也就是说我每遍历一个Teacherbasicinfo，就将其teacherId转换成字符串型添加到这个Map中，在每次添加之前我先检查这个Map是否已经存在了（且不论这种方法的好与坏，这是我们几年前的代码了）&lt;/p&gt;
&lt;p&gt;这段代码无编译异常、无运行异常，但是却有&lt;strong&gt;逻辑异常&lt;/strong&gt;。有用户反映。多次选择的时候会有重复的项出现。&lt;/p&gt;
&lt;p&gt;经过多番调试，最后发现第八行代码有误，应该将&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;participatorsMap.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;改成为：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;participatorsMap.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;valueOf&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;id&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;恍然大悟，虽然我使用的是范型，但是Map的get方法仍然接受的是Object类型的参数，不对其参数进行检查，其put方法的签名为V put(K key, V value)，则会对key和value的类型都进行检查。&lt;/p&gt;
&lt;p&gt;这是我的错呢，还是Java的错，为啥不把get方法的参数用范型类型检查一下呢？可能是sun的工程师有别的考虑吧。&lt;/string&gt;&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321219/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321219/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321219/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321219/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2010/01/24/%e4%b8%80%e4%b8%aa%e9%9a%90%e8%97%8f%e4%ba%86%e5%b0%86%e8%bf%912%e5%b9%b4%e7%9a%84bug/feed/</wfw:commentRss><slash:comments>1</slash:comments><description>最近在维护华中科技大学电信系的电子档案库，发现了一个隐藏了将近2年的Bug，记录如下：
需求：一个科研项目有一定的工作量，而每个项目有很多参与人，需要为每个参与人设置其工作量分配额度。当用户添加了一个项目时，需要同时添加其参与人:
实现：当用户录入了科研项目信息之后，点击“添加参与人”的按钮，转向到选择参与人的页面，可以勾选任意数目的参与人，点击“保存”按钮后返回科研项目信息页面。
在执行保存选择的参与人信息时，检查所选择的人员是否已经在科研项目的参与人中存在的代码如下：

1
2
3
4
5
6
7
8
9
10
11
12
13
for &amp;#40;Iterator&amp;#60;string&amp;#62; iterator = selectedMemberList.iterator&amp;#40;&amp;#41;; iterator.hasNext&amp;#40;&amp;#41;;&amp;#41; &amp;#123;
    ParticipatorBean participatorBean = new ParticipatorBean&amp;#40;&amp;#41;;
    long teacherId = Long.parseLong&amp;#40;iterator.next&amp;#40;&amp;#41;&amp;#41;;
    Teacherbasicinfo teacher = ServiceProvider.getTeacherInfoService&amp;#40;&amp;#41;.findById&amp;#40;teacherId&amp;#41;;
    Long id = teacher.getTeacherId&amp;#40;&amp;#41;;
    participatorBean.setTeacherId&amp;#40;id&amp;#41;;
    participatorBean.setTeacherName&amp;#40;teacher.getTeacherName&amp;#40;&amp;#41;&amp;#41;;
    if &amp;#40;participatorsMap.get&amp;#40;id&amp;#41; == null&amp;#41; &amp;#123;
    [...]&lt;img src=&quot;http://www1.feedsky.com/t1/335321219/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321219/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321219/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321219/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>JSF</category><category>Java笔记</category><pubDate>Sun, 24 Jan 2010 01:48:59 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2010/01/24/%e4%b8%80%e4%b8%aa%e9%9a%90%e8%97%8f%e4%ba%86%e5%b0%86%e8%bf%912%e5%b9%b4%e7%9a%84bug/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=152</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2010/01/24/%e4%b8%80%e4%b8%aa%e9%9a%90%e8%97%8f%e4%ba%86%e5%b0%86%e8%bf%912%e5%b9%b4%e7%9a%84bug/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321219/6047504</fs:itemid></item><item><title>好用的Wordpress代码高亮插件WP-Syntax</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321220/6047504/1/item.html</link><content:encoded>&lt;p&gt;开博几个月以来一直没有使用代码高亮插件，并不是我不想，而是找到的几个代码插件实在是太让人失望：有些很安装使用很复杂，让人摸不到头脑；有些效果太夸张，界面不够简单整洁；还有些用js来实现，但是遇到代码中有&amp;amp;gt;（大家都知道这是&amp;gt;的转义字符）这样的代码就出错了，而我有很多代码经过Wordpress的处理有些尖括号已经被转义字符替代了，有些XML代码就更厉害，通篇都是&amp;amp;gt; &amp;amp;lt;，让人头疼不已。&lt;/p&gt;
&lt;p&gt;今天偶然发现一个插件，名为&lt;a href=&quot;http://wordpress.org/extend/plugins/wp-syntax/&quot;&gt;WP-Syntax&lt;/a&gt;，顿时让我眼睛一亮，别人都说它是兼容性最好的代码高亮插件，经过试用，果不其然，我已经在本博客上全面启用这个插件了。&lt;/p&gt;
&lt;p&gt;使用方法其实很多，不妨我罗嗦两句，兼凑个字数，也算做个笔记：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;xml&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;pre&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;lang&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;java&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;line&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;1&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000066;&quot;&gt;escaped&lt;/span&gt;=&lt;span style=&quot;color: #ff0000;&quot;&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;//Java代码&lt;span style=&quot;color: #009900;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;lt;/pre&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;其中标签pre的属性&lt;strong&gt;lang表示语言类型&lt;/strong&gt;，&lt;strong&gt;line表示显示起始代码行号&lt;/strong&gt;，如果不设置则不显示行号，&lt;strong&gt;escaped表示是否代码是否为转义字符&lt;/strong&gt;，默认为false，即如果你的代码中有转义字符，则需要设置escaped=&amp;#8221;true&amp;#8221;&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321220/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321220/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321220/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321220/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2010/01/24/wp-syntax/feed/</wfw:commentRss><slash:comments>1</slash:comments><description>开博几个月以来一直没有使用代码高亮插件，并不是我不想，而是找到的几个代码插件实在是太让人失望：有些很安装使用很复杂，让人摸不到头脑；有些效果太夸张，界面不够简单整洁；还有些用js来实现，但是遇到代码中有&amp;#38;gt;（大家都知道这是&amp;#62;的转义字符）这样的代码就出错了，而我有很多代码经过Wordpress的处理有些尖括号已经被转义字符替代了，有些XML代码就更厉害，通篇都是&amp;#38;gt; &amp;#38;lt;，让人头疼不已。
今天偶然发现一个插件，名为WP-Syntax，顿时让我眼睛一亮，别人都说它是兼容性最好的代码高亮插件，经过试用，果不其然，我已经在本博客上全面启用这个插件了。
使用方法其实很多，不妨我罗嗦两句，兼凑个字数，也算做个笔记：

1
&amp;#60;pre lang=&amp;#34;java&amp;#34; line=&amp;#34;1&amp;#34; escaped=&amp;#34;true&amp;#34;&amp;#62;//Java代码&amp;#60;/pre&amp;#62;

其中标签pre的属性lang表示语言类型，line表示显示起始代码行号，如果不设置则不显示行号，escaped表示是否代码是否为转义字符，默认为false，即如果你的代码中有转义字符，则需要设置escaped=&amp;#8221;true&amp;#8221;&lt;img src=&quot;http://www1.feedsky.com/t1/335321220/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321220/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321220/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321220/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><pubDate>Sun, 24 Jan 2010 01:04:49 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2010/01/24/wp-syntax/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=167</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2010/01/24/wp-syntax/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321220/6047504</fs:itemid></item><item><title>Java int型转换中文大写数字表示方法</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321221/6047504/1/item.html</link><content:encoded>&lt;p&gt;之前写过一篇博客，记录的是如何&lt;a href=&quot;http://www.zhlwish.com/2009/11/15/java-chinese-number-to-int/&quot;&gt;将Java中文大写数字转int型&lt;/a&gt;，今天遇到的问题是将Java int型转换成中文大写数字表示。&lt;/p&gt;
&lt;p&gt;下面是程序，很容易理解，不过，只支持10000以内的数字转换：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; intToChnNumConverter&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; num&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; resultNumber &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;null&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;num &lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;10000&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;||&lt;/span&gt; num &lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #003399;&quot;&gt;HashMap&lt;/span&gt; chnNumbers &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;HashMap&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;零&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;一&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;2&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;二&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;3&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;三&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;4&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;四&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;5&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;五&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;6&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;六&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;7&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;七&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;8&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;八&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;9&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;九&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    &lt;span style=&quot;color: #003399;&quot;&gt;HashMap&lt;/span&gt; unitMap &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;HashMap&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    unitMap.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    unitMap.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;十&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    unitMap.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;百&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    unitMap.&lt;span style=&quot;color: #006633;&quot;&gt;put&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1000&lt;/span&gt;, &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;千&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt; unitArray &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1000&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;100&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&amp;nbsp;
    StringBuilder result &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; StringBuilder&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; i &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;num &lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;int&lt;/span&gt; n1 &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; num &lt;span style=&quot;color: #339933;&quot;&gt;/&lt;/span&gt; unitArray&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;n1 &lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            result.&lt;span style=&quot;color: #006633;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;chnNumbers.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;n1&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;unitMap.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;unitArray&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;n1 &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;result.&lt;span style=&quot;color: #006633;&quot;&gt;lastIndexOf&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;零&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;!=&lt;/span&gt; result.&lt;span style=&quot;color: #006633;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
                result.&lt;span style=&quot;color: #006633;&quot;&gt;append&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;零&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
            &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
        num &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; num &lt;span style=&quot;color: #339933;&quot;&gt;%&lt;/span&gt; unitArray&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#91;&lt;/span&gt;i&lt;span style=&quot;color: #339933;&quot;&gt;++&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#93;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;num &lt;span style=&quot;color: #339933;&quot;&gt;==&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
            &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;break&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
        &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    resultNumber &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; result.&lt;span style=&quot;color: #006633;&quot;&gt;toString&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;resultNumber.&lt;span style=&quot;color: #006633;&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;零&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        resultNumber &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; resultNumber.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;resultNumber.&lt;span style=&quot;color: #006633;&quot;&gt;startsWith&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;一十&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
        resultNumber &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; resultNumber.&lt;span style=&quot;color: #006633;&quot;&gt;substring&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;1&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;
    &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;return&lt;/span&gt; resultNumber&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321221/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321221/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321221/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321221/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2010/01/21/java-int-to-chinese-number/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>之前写过一篇博客，记录的是如何将Java中文大写数字转int型，今天遇到的问题是将Java int型转换成中文大写数字表示。
下面是程序，很容易理解，不过，只支持10000以内的数字转换：

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public static String intToChnNumConverter&amp;#40;int num&amp;#41;&amp;#123;
    String resultNumber = null;
    if&amp;#40;num &amp;#62; 10000 &amp;#124;&amp;#124; num &amp;#60; 0&amp;#41;&amp;#123;
        return &amp;#34;&amp;#34;;
    &amp;#125;
    HashMap chnNumbers = new HashMap&amp;#40;&amp;#41;;
    chnNumbers.put&amp;#40;0, &amp;#34;零&amp;#34;&amp;#41;;
    chnNumbers.put&amp;#40;1, &amp;#34;一&amp;#34;&amp;#41;;
  [...]&lt;img src=&quot;http://www1.feedsky.com/t1/335321221/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321221/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321221/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321221/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Java笔记</category><pubDate>Thu, 21 Jan 2010 18:10:22 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2010/01/21/java-int-to-chinese-number/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=150</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2010/01/21/java-int-to-chinese-number/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321221/6047504</fs:itemid></item><item><title>一些国人开发的好用JS控件</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321222/6047504/1/item.html</link><content:encoded>&lt;p&gt;以前都是用国外开发的像&lt;a href=&quot;http://ckeditor.com/&quot; target=&quot;_blank&quot;&gt;FCKEditor&lt;/a&gt;（已经更名为CKEditor）、&lt;a href=&quot;http://ckeditor.com/&quot; target=&quot;_blank&quot;&gt;Flexigrid&lt;/a&gt;等，很多英文文档看得头大，而且代码不一定写得很好，比如&lt;a href=&quot;http://ckeditor.com/&quot; target=&quot;_blank&quot;&gt;Flexigrid&lt;/a&gt;，我找到了至少2处bug，开发中很多时间都花费在看那上千行的js脚本上了。这里介绍几款国人开发的js控件，非常好用&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;strong&gt;My97日期控件&lt;/strong&gt;:&lt;a href=&quot;http://www.my97.net/dp&quot;&gt;http://www.my97.net/dp&lt;/a&gt;&lt;br /&gt;
好处：可以选择时间，可以显示周，自定义格式，有多种皮肤可供选择，选择老年份非常方便：&lt;br /&gt;
&lt;img class=&quot;aligncenter&quot; title=&quot;My97日期控件选择年份&quot; src=&quot;http://www.my97.net/dp/demo/resource/pic3.jpg&quot; alt=&quot;&quot; width=&quot;180&quot; height=&quot;197&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;KindEditor:&lt;/strong&gt;&lt;a href=&quot;http://www.kindsoft.net&quot; target=&quot;_blank&quot;&gt; http://www.kindsoft.net&lt;/a&gt;&lt;br /&gt;
一款可见即所得编辑器，用起来非常简单，相比CKEditor和TinyMCE要简单很多，特别是TinyMCE一大堆插件，一看头就晕了，项目开发期紧张，哪有那么多时间去看这些个插件是干嘛的哟。&lt;br /&gt;
支持两种皮肤，其中一种就是TinyMCE的皮肤，呵呵。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基于JQuery的Inline Editor插件&lt;/strong&gt;：&lt;a href=&quot;http://www.wbfsaworkstation.com.cn&quot;&gt;http://www.wbfsaworkstation.com.cn&lt;/a&gt;&lt;br /&gt;
实在是不好意思，我不知道inline这个词怎么用中文来表达，我想每个开发人员应该心里明白是啥意思吧。支持单选按钮、多选列表、文本域、软键盘等，还有评分插件以及日历插件（日历插件基于My97）&lt;/p&gt;
&lt;p&gt;如果遇到好的，会继续推荐，呵呵&amp;#8230;&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321222/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321222/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321222/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321222/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2010/01/13/js_html_control/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>以前都是用国外开发的像FCKEditor（已经更名为CKEditor）、Flexigrid等，很多英文文档看得头大，而且代码不一定写得很好，比如Flexigrid，我找到了至少2处bug，开发中很多时间都花费在看那上千行的js脚本上了。这里介绍几款国人开发的js控件，非常好用
My97日期控件:http://www.my97.net/dp
好处：可以选择时间，可以显示周，自定义格式，有多种皮肤可供选择，选择老年份非常方便：

KindEditor: http://www.kindsoft.net
一款可见即所得编辑器，用起来非常简单，相比CKEditor和TinyMCE要简单很多，特别是TinyMCE一大堆插件，一看头就晕了，项目开发期紧张，哪有那么多时间去看这些个插件是干嘛的哟。
支持两种皮肤，其中一种就是TinyMCE的皮肤，呵呵。
基于JQuery的Inline Editor插件：http://www.wbfsaworkstation.com.cn
实在是不好意思，我不知道inline这个词怎么用中文来表达，我想每个开发人员应该心里明白是啥意思吧。支持单选按钮、多选列表、文本域、软键盘等，还有评分插件以及日历插件（日历插件基于My97）
如果遇到好的，会继续推荐，呵呵&amp;#8230;&lt;img src=&quot;http://www1.feedsky.com/t1/335321222/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321222/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321222/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321222/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><category>jsp</category><category>jquery</category><category>javascript</category><pubDate>Wed, 13 Jan 2010 23:42:31 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2010/01/13/js_html_control/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=146</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2010/01/13/js_html_control/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321222/6047504</fs:itemid></item><item><title>JSF中CommandButton与CommandLink传值</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321223/6047504/1/item.html</link><content:encoded>&lt;p&gt;f:param标签能够将一个参数添加到组件。需要注意的是&lt;span style=&quot;color: #0000ff;&quot;&gt;f:param标签的不同表现依赖于它所关联的组件类型&lt;/span&gt;：&lt;/p&gt;
&lt;p&gt;【1】如果为 h:outputText添加f:param标签，那么JSF实现将使用参数来填充占位符，例如{0}、{1}等。&lt;/p&gt;
&lt;p&gt;【2】如果添加f:param标签到h:commandLink，JSF实现会将参数值作为请求参数传递到服务器，如：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;h &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;commandLink actionListener&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;#{userListBean.checkUser}&amp;quot;&lt;/span&gt; value&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;审核通过&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;f &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;param name&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userId&amp;quot;&lt;/span&gt; value&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;#{user.userId}&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;/&lt;/span&gt;h&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;在服务器端可以使用如下方法来获取传递到服务器端的值：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; checkUser&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;ActionEvent&lt;/span&gt; actionEvent&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; uid &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; FacesContext.&lt;span style=&quot;color: #006633;&quot;&gt;getCurrentInstance&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;getExternalContext&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;getRequestParameterMap&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userId&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;// other code&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;但是f:param的传值方式对于h:commandButton是没有作用的，（如果你是用搜索引擎搜到这篇文章的话，相信你肯定是遇到了这个问题），详情可以参考&lt;a href=&quot;http://www.javaeye.com/topic/93388&quot;&gt;http://www.javaeye.com/topic/93388&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果是h:commandButton，那么可以使用f:attribute来进行传值，示例如下：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;h &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;commandButton actionListener&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;#{userListBean.resetPassword}&amp;quot;&lt;/span&gt; value&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;审核通过&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;&lt;/span&gt;f &lt;span style=&quot;color: #339933;&quot;&gt;:&lt;/span&gt;attribute name&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userId&amp;quot;&lt;/span&gt; value&lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;#{user.userId}&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span style=&quot;color: #339933;&quot;&gt;&amp;lt;/&lt;/span&gt;h&lt;span style=&quot;color: #339933;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;在服务器端可以使用如下方法来获取传递到服务器端的值：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; resetPassword&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;ActionEvent&lt;/span&gt; actionEvent&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#123;&lt;/span&gt;
    &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;long&lt;/span&gt; userIdString &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;Long&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt; actionEvent.&lt;span style=&quot;color: #006633;&quot;&gt;getComponent&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;getAttributes&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #006633;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userId&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
    &lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//other code ……&lt;/span&gt;
&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;


&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321223/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321223/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321223/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321223/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2009/12/31/jsf_commandbutton_commandlink/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>f:param标签能够将一个参数添加到组件。需要注意的是f:param标签的不同表现依赖于它所关联的组件类型：
【1】如果为 h:outputText添加f:param标签，那么JSF实现将使用参数来填充占位符，例如{0}、{1}等。
【2】如果添加f:param标签到h:commandLink，JSF实现会将参数值作为请求参数传递到服务器，如：

1
2
3
&amp;#60;h :commandLink actionListener=&amp;#34;#{userListBean.checkUser}&amp;#34; value=&amp;#34;审核通过&amp;#34;&amp;#62;
    &amp;#60;f :param name=&amp;#34;userId&amp;#34; value=&amp;#34;#{user.userId}&amp;#34; /&amp;#62;
&amp;#60;/h&amp;#62;

在服务器端可以使用如下方法来获取传递到服务器端的值：

1
2
3
4
private void checkUser&amp;#40;ActionEvent actionEvent&amp;#41;&amp;#123;
    String uid = FacesContext.getCurrentInstance&amp;#40;&amp;#41;.getExternalContext&amp;#40;&amp;#41;.getRequestParameterMap&amp;#40;&amp;#41;.get&amp;#40;&amp;#34;userId&amp;#34;&amp;#41;;
    // other code
&amp;#125;

但是f:param的传值方式对于h:commandButton是没有作用的，（如果你是用搜索引擎搜到这篇文章的话，相信你肯定是遇到了这个问题），详情可以参考http://www.javaeye.com/topic/93388
如果是h:commandButton，那么可以使用f:attribute来进行传值，示例如下：

1
2
3
&amp;#60;h :commandButton actionListener=&amp;#34;#{userListBean.resetPassword}&amp;#34; value=&amp;#34;审核通过&amp;#34;&amp;#62;
    &amp;#60;f :attribute name=&amp;#34;userId&amp;#34; value=&amp;#34;#{user.userId}&amp;#34;/&amp;#62;
&amp;#60;/h&amp;#62;

在服务器端可以使用如下方法来获取传递到服务器端的值：

1
2
3
4
private void resetPassword&amp;#40;ActionEvent actionEvent&amp;#41;&amp;#123;
    long userIdString = &amp;#40;Long&amp;#41; actionEvent.getComponent&amp;#40;&amp;#41;.getAttributes&amp;#40;&amp;#41;.get&amp;#40;&amp;#34;userId&amp;#34;&amp;#41;;
    //other code ……
&amp;#125;&lt;img src=&quot;http://www1.feedsky.com/t1/335321223/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321223/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321223/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321223/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><category>JSF</category><category>web后台</category><pubDate>Thu, 31 Dec 2009 15:48:06 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2009/12/31/jsf_commandbutton_commandlink/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=139</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2009/12/31/jsf_commandbutton_commandlink/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321223/6047504</fs:itemid></item><item><title>JSP &amp; Servlet讲座PPT</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321224/6047504/1/item.html</link><content:encoded>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;object width=&quot;550&quot; height=&quot;451&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=servletandjsp-091222074743-phpapp02&quot;/&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;/&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;/&gt;&lt;embed src=&quot;http://static.slideshare.net/swf/ssplayer2.swf?doc=servletandjsp-091222074743-phpapp02&quot;  type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;550&quot; height=&quot;451&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;!-- ysttest:Array
(
    [id] =&gt; 2764960&amp;amp;doc=servletandjsp-091222074743-phpapp02
)
--&gt;&lt;/p&gt;
&lt;p&gt;如果听了讲座的小盆友请给个评价吧，如果没听的话给ppt一个评价吧，谢谢。&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321224/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321224/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321224/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321224/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2009/12/22/jsp_servlet_ppt/feed/</wfw:commentRss><slash:comments>3</slash:comments><description>如果听了讲座的小盆友请给个评价吧，如果没听的话给ppt一个评价吧，谢谢。&lt;img src=&quot;http://www1.feedsky.com/t1/335321224/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321224/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321224/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321224/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><pubDate>Tue, 22 Dec 2009 22:02:08 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2009/12/22/jsp_servlet_ppt/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=134</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2009/12/22/jsp_servlet_ppt/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321224/6047504</fs:itemid></item><item><title>Appfuse中文教程</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321225/6047504/1/item.html</link><content:encoded>&lt;p&gt;现在的Web应用开发人员是幸福的，有如此多的选择，Web层有Sturts2、JSF、Spring MVC、Tapestry等，持久层可以选择Hibernate、iBATIS或者JPA等，还有极为强大的Spring作为粘合剂，完美地运行时自动创 建所需的一切对象（依赖注入）。然而我们这些开发人员也是不幸的，因为要让一切完美的运行有太多太多的配置——XML、Annotation甚至是 Properties文件。当开始一个新项目时，要搭建起一个能正常运行、能真正简化开发、能真正实现模块化开发的Web应用开发骨架太难了，更不用说还 要加入DbUnit等自动测试框架。&lt;/p&gt;
&lt;p&gt;但是有了Appfuse，一切变得简单起来，Appfuse是一个开源的Web应用骨架生成工具，支持上文提到的任何一种开发工具的组合，包括Web Services、工作流、任务调度等，能方便的生成Web开发中常用CRUD骨架，够诱人了吧。&lt;/p&gt;
&lt;p&gt;吹了这么多，Appfuse其实很简单，你甚至不需要下载，因为她实质上是一个Maven插件，你运行mvn命令时，maven会自动帮你搞定任何事情，也就是说你只需要知道命令就行了，而且实际上你也不需要记住命令，&lt;a href=&quot;http://appfuse.org/display/APF/AppFuse+QuickStart+-+Chinese&quot;&gt;http://appfuse.org/display/APF/AppFuse+QuickStart+-+Chinese&lt;/a&gt; 这个页面可以帮助你生成命令，而且是中文的，虽然翻译得不怎么样，不过看得懂。&lt;/p&gt;
&lt;p&gt;选择好你需要的Web框架，将它帮你生成的mvn命令直接复制到命令行中，如果你已经按&lt;a href=&quot;http://appfuse.org/display/APF/Development+Environment&quot;&gt;http://appfuse.org/display/APF/Development+Environment&lt;/a&gt; 配置好了环境变量的话，你可以看到maven开始下载一切需要的东西了。其实配置环境变量没有说得那么复杂，只需要将JDK、Maven、MySQL的bin目录都加入到path里面就行了，linux的用户请自己摸索一下，我不是很懂。&lt;/p&gt;
&lt;p&gt;其实上面这些如果你是标准SSH(Struts2+Spring+Hibernate架构)还有一个选择就是&lt;a href=&quot;http://www.springside.org.cn/&quot;&gt;Springside&lt;/a&gt;， 国人开发的，异常不错，强烈推荐，个人认为在SSH方面比Appfuse要更好一些。不过Appfuse还有个绝招，它还提供了一个VMWare 虚拟机镜像，可以直接下下来，里面已经装好了Subversion（版本控制）, CruiseControl（持续集成工具） 和Trac（bug追踪工具以及wiki），不过我没有尝试，不知道具体使用起来怎么样。&lt;/p&gt;
&lt;p&gt;第一篇就到这里，要知后事如何，且听下回分解。&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321225/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321225/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321225/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321225/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2009/12/21/appfuse/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>现在的Web应用开发人员是幸福的，有如此多的选择，Web层有Sturts2、JSF、Spring MVC、Tapestry等，持久层可以选择Hibernate、iBATIS或者JPA等，还有极为强大的Spring作为粘合剂，完美地运行时自动创 建所需的一切对象（依赖注入）。然而我们这些开发人员也是不幸的，因为要让一切完美的运行有太多太多的配置——XML、Annotation甚至是 Properties文件。当开始一个新项目时，要搭建起一个能正常运行、能真正简化开发、能真正实现模块化开发的Web应用开发骨架太难了，更不用说还 要加入DbUnit等自动测试框架。
但是有了Appfuse，一切变得简单起来，Appfuse是一个开源的Web应用骨架生成工具，支持上文提到的任何一种开发工具的组合，包括Web Services、工作流、任务调度等，能方便的生成Web开发中常用CRUD骨架，够诱人了吧。
吹了这么多，Appfuse其实很简单，你甚至不需要下载，因为她实质上是一个Maven插件，你运行mvn命令时，maven会自动帮你搞定任何事情，也就是说你只需要知道命令就行了，而且实际上你也不需要记住命令，http://appfuse.org/display/APF/AppFuse+QuickStart+-+Chinese 这个页面可以帮助你生成命令，而且是中文的，虽然翻译得不怎么样，不过看得懂。
选择好你需要的Web框架，将它帮你生成的mvn命令直接复制到命令行中，如果你已经按http://appfuse.org/display/APF/Development+Environment 配置好了环境变量的话，你可以看到maven开始下载一切需要的东西了。其实配置环境变量没有说得那么复杂，只需要将JDK、Maven、MySQL的bin目录都加入到path里面就行了，linux的用户请自己摸索一下，我不是很懂。
其实上面这些如果你是标准SSH(Struts2+Spring+Hibernate架构)还有一个选择就是Springside， 国人开发的，异常不错，强烈推荐，个人认为在SSH方面比Appfuse要更好一些。不过Appfuse还有个绝招，它还提供了一个VMWare 虚拟机镜像，可以直接下下来，里面已经装好了Subversion（版本控制）, CruiseControl（持续集成工具） 和Trac（bug追踪工具以及wiki），不过我没有尝试，不知道具体使用起来怎么样。
第一篇就到这里，要知后事如何，且听下回分解。&lt;img src=&quot;http://www1.feedsky.com/t1/335321225/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321225/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321225/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321225/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><category>Maven</category><category>教程</category><category>hibernate</category><category>appfuse</category><category>struts2</category><pubDate>Mon, 21 Dec 2009 20:24:33 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2009/12/21/appfuse/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=128</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2009/12/21/appfuse/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321225/6047504</fs:itemid></item><item><title>JSP中Session、Cookie的使用与“记住我的登录状态”示例程序</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321226/6047504/1/item.html</link><content:encoded>&lt;p&gt;本文为原创文章，转载请注明来源&lt;a href=&quot;http://www.zhlwish.com&quot;&gt;http://www.zhlwish.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在&lt;a href=&quot;http://www.zhlwish.com/2009/11/15/remember-me/&quot;&gt;《session、cookie与“记住我的登录状态”的功能的实现》&lt;/a&gt;一文中详细讲解了Cookie和Session的原理以及“记住我的登录状态”功能的实现原理，本文以Servlet、JSP技术为例讲解Servlet中Cookie和Session的使用以及以此为基础的“记住我的登录状态”功能的实现方式，最后附上例子程序的源代码。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;EL表达式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;本文的样例源代码中用到了JSP EL表达式，JSP1.0中EL表达式是作为JSTL的一部分，即只能在JSTL标签中使用。JSP2.0中EL表达式可以在文本模板中使用，即可以直接在JSP页面中使用，本文的样例源代码使用&lt;code&gt;${pageContext.request.contextPath}&lt;/code&gt;在JSP页面中获取当前Web应用的路径(context path)，关于EL表达式的使用请参见&lt;a href=&quot;http://www.ibm.com/developerworks/cn/java/j-jstl0211/&quot;&gt;《JSTL入门：表达式语言》&lt;/a&gt;，关于Web应用的路径请参见&lt;a href=&quot;http://www.zhlwish.com/2009/12/04/servlet_jsp_context_path&quot;&gt;《Servlet、JSP中获取Web应用路径(context path)的方法》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servlet中的Session&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;javax.servlet.http.HttpSession是Servlet API中定义的一个接口，其中比较重要的方法有：&lt;br /&gt;
将一个对象实例存放在Session中：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #000066; font-weight: bold;&quot;&gt;void&lt;/span&gt; setAttribute&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; name, &lt;span style=&quot;color: #003399;&quot;&gt;Object&lt;/span&gt; value&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;通过名称获取Session中的对象实例：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #003399;&quot;&gt;Object&lt;/span&gt; getAttribute&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; name&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Session对象可以用过HttpServletRequest对象获取，一般在Servlet中通过&lt;code&gt;request.getSession();&lt;/code&gt;获取一个Session对象。&lt;/p&gt;
&lt;p&gt;Web服务器每接收到一个&lt;strong&gt;新的&lt;/strong&gt;请求，服务器就会新建一个Session对象，一般会将当前用户帐号存放于Session中，当然你可以放更多的对象，这样会增加服务器的负担。Session会在一定时间后由Servlet容器销毁，这个时间可以在Web应用的web.xml里面进行设置。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Servlet中的Cookie&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;javax.servlet.http.Cookie是一个类，有一个构造函数&lt;code&gt;public Cookie(String name, String value)&lt;/code&gt;，一般用下面的方式创建一个Cookie对象：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
4
5
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; cookieName &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;userinfo&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #003399;&quot;&gt;String&lt;/span&gt; cookieValue &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000ff;&quot;&gt;&amp;quot;admin,123&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
Cookie cookie &lt;span style=&quot;color: #339933;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #000000; font-weight: bold;&quot;&gt;new&lt;/span&gt; Cookie&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;cookieName, cookieValue&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
cookie.&lt;span style=&quot;color: #006633;&quot;&gt;setMaxAge&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;14&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;24&lt;/span&gt; &lt;span style=&quot;color: #339933;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #cc66cc;&quot;&gt;3600&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//设置Cookie的过期时间&lt;/span&gt;
cookie.&lt;span style=&quot;color: #006633;&quot;&gt;setPath&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;request.&lt;span style=&quot;color: #006633;&quot;&gt;getContextPath&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: #666666; font-style: italic;&quot;&gt;//设置路径&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;上面仅仅创建了一个Cookie，要使其产生作用，还需要使用&lt;code&gt;response.addCookie(cookie);&lt;/code&gt;将Cookie发送到用户浏览器。&lt;/p&gt;
&lt;p&gt;一般使用下面的方法将一个Cookie删除，也就是将Cookie设成过期并发送到客户端：&lt;/p&gt;

&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1
2
3
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;java&quot; style=&quot;font-family:monospace;&quot;&gt;cookie.&lt;span style=&quot;color: #006633;&quot;&gt;setMaxAge&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #cc66cc;&quot;&gt;0&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
cookie.&lt;span style=&quot;color: #006633;&quot;&gt;setPath&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;request.&lt;span style=&quot;color: #006633;&quot;&gt;getContextPath&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;
response.&lt;span style=&quot;color: #006633;&quot;&gt;addCookie&lt;/span&gt;&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#40;&lt;/span&gt;cookie&lt;span style=&quot;color: #009900;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #339933;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;记住我的登录状态的实现&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Servlet中一般使用Filter来保护需要经过认证才能访问的资源，当Filter被调用时对Session以及Cookie中的数据进行检查，如果通过了认证，则放行这次请求；如果未通过认证，则强制跳转到登录页面。具体流程如下图所示：&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a rel=&quot;点击查看大图&quot; href=&quot;http://www.zhlwish.com/wp-content/uploads/2009/12/序列图1.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-117&quot; title=&quot;记住我的登录状态序列图&quot; src=&quot;http://www.zhlwish.com/wp-content/uploads/2009/12/序列图1.jpg&quot; alt=&quot;记住我的登录状态序列图&quot; width=&quot;496&quot; height=&quot;298&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;图中的ForceLoginFilter和DoLoginServlet的实现请参见示例代码。&lt;/p&gt;
&lt;p&gt;示例代码中，受保护的资源是admin文件夹下的所有内容，所以web.xml中ForceLoginFilter的url-pattern设置为/admin/*，如果你需要更灵活的资源控制，可以将url-pattern设置为/*，然后在ForceLoginFilter通过检查请求的URL来实现更为详细的控制。&lt;/p&gt;
&lt;p&gt;示例代码中，密码使用明文存储在Cookie中，这是不可取的，需要加密。&lt;/p&gt;
&lt;p&gt;示例代码使用eclipse开发，直接可以导入到eclipse工程中，在JDK5.0、Tomcat 6.0上测试通过，如果你在运行过程中发现bug，请留言提出，谢谢。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.zhlwish.com/wp-content/uploads/2009/12/remember_me.zip&quot;&gt;&lt;strong&gt;示例代码下载&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321226/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321226/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321226/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321226/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2009/12/05/jsp_session_cookie_remember_me/feed/</wfw:commentRss><slash:comments>2</slash:comments><description>本文为原创文章，转载请注明来源http://www.zhlwish.com
在《session、cookie与“记住我的登录状态”的功能的实现》一文中详细讲解了Cookie和Session的原理以及“记住我的登录状态”功能的实现原理，本文以Servlet、JSP技术为例讲解Servlet中Cookie和Session的使用以及以此为基础的“记住我的登录状态”功能的实现方式，最后附上例子程序的源代码。
EL表达式
本文的样例源代码中用到了JSP EL表达式，JSP1.0中EL表达式是作为JSTL的一部分，即只能在JSTL标签中使用。JSP2.0中EL表达式可以在文本模板中使用，即可以直接在JSP页面中使用，本文的样例源代码使用${pageContext.request.contextPath}在JSP页面中获取当前Web应用的路径(context path)，关于EL表达式的使用请参见《JSTL入门：表达式语言》，关于Web应用的路径请参见《Servlet、JSP中获取Web应用路径(context path)的方法》
Servlet中的Session
javax.servlet.http.HttpSession是Servlet API中定义的一个接口，其中比较重要的方法有：
将一个对象实例存放在Session中：

1
public void setAttribute&amp;#40;String name, Object value&amp;#41;;

通过名称获取Session中的对象实例：

1
public Object getAttribute&amp;#40;String name&amp;#41;;

Session对象可以用过HttpServletRequest对象获取，一般在Servlet中通过request.getSession();获取一个Session对象。
Web服务器每接收到一个新的请求，服务器就会新建一个Session对象，一般会将当前用户帐号存放于Session中，当然你可以放更多的对象，这样会增加服务器的负担。Session会在一定时间后由Servlet容器销毁，这个时间可以在Web应用的web.xml里面进行设置。
Servlet中的Cookie
javax.servlet.http.Cookie是一个类，有一个构造函数public Cookie(String name, String value)，一般用下面的方式创建一个Cookie对象：

1
2
3
4
5
String cookieName = &amp;#34;userinfo&amp;#34;;
String cookieValue = &amp;#34;admin,123&amp;#34;;
Cookie cookie = new Cookie&amp;#40;cookieName, cookieValue&amp;#41;;
cookie.setMaxAge&amp;#40;14 * 24 * 3600&amp;#41;;//设置Cookie的过期时间
cookie.setPath&amp;#40;request.getContextPath&amp;#40;&amp;#41;&amp;#41;;//设置路径

上面仅仅创建了一个Cookie，要使其产生作用，还需要使用response.addCookie(cookie);将Cookie发送到用户浏览器。
一般使用下面的方法将一个Cookie删除，也就是将Cookie设成过期并发送到客户端：

1
2
3
cookie.setMaxAge&amp;#40;0&amp;#41;;
cookie.setPath&amp;#40;request.getContextPath&amp;#40;&amp;#41;&amp;#41;;
response.addCookie&amp;#40;cookie&amp;#41;;

记住我的登录状态的实现
Servlet中一般使用Filter来保护需要经过认证才能访问的资源，当Filter被调用时对Session以及Cookie中的数据进行检查，如果通过了认证，则放行这次请求；如果未通过认证，则强制跳转到登录页面。具体流程如下图所示：

图中的ForceLoginFilter和DoLoginServlet的实现请参见示例代码。
示例代码中，受保护的资源是admin文件夹下的所有内容，所以web.xml中ForceLoginFilter的url-pattern设置为/admin/*，如果你需要更灵活的资源控制，可以将url-pattern设置为/*，然后在ForceLoginFilter通过检查请求的URL来实现更为详细的控制。
示例代码中，密码使用明文存储在Cookie中，这是不可取的，需要加密。
示例代码使用eclipse开发，直接可以导入到eclipse工程中，在JDK5.0、Tomcat 6.0上测试通过，如果你在运行过程中发现bug，请留言提出，谢谢。
示例代码下载&lt;img src=&quot;http://www1.feedsky.com/t1/335321226/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321226/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321226/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321226/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><category>servlet</category><category>jsp</category><category>web后台</category><pubDate>Sat, 05 Dec 2009 01:30:11 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2009/12/05/jsp_session_cookie_remember_me/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=116</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2009/12/05/jsp_session_cookie_remember_me/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321226/6047504</fs:itemid></item><item><title>Servlet、JSP中获取Web应用路径(context path)的方法</title><link>http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321227/6047504/1/item.html</link><content:encoded>&lt;p&gt;在Servlet中可以直接使用&lt;code&gt;request.getContextPath()&lt;/code&gt;获取当前web应用的路径(context path)&lt;/p&gt;
&lt;p&gt;在JSP 2.0页面中可以使用el表达式&lt;code&gt;${pageContext.request.contextPath}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;如果是JSF页面，因为JSF默认使用#作为el表达式的起始符，所以应该写成&lt;code&gt;#{pageContext.request.contextPath}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;因为JSP2.0之前的版本不支持文本模板中的el表达式，故可以使用嵌入java代码来实现，和Servlet中一样&lt;/p&gt;
&lt;p&gt;如果在JSP2.0之前的版本中使用了JSTL标签（el表达式的概念是JSTL 1.0推出来的），所以仍然可以配合JSTL的&lt;c :out&gt;标签使用el表达式输出当前Web应用路径(context path)&lt;/c&gt;&lt;/p&gt;

&lt;div style=&quot;font-size:0px;height:0px;line-height:0px;margin:0;padding:0;clear:both&quot;&gt;&lt;/div&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/335321227/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321227/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321227/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321227/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><wfw:commentRss>http://www.zhlwish.com/2009/12/04/servlet_jsp_context_path/feed/</wfw:commentRss><slash:comments>0</slash:comments><description>在Servlet中可以直接使用request.getContextPath()获取当前web应用的路径(context path)
在JSP 2.0页面中可以使用el表达式${pageContext.request.contextPath}
如果是JSF页面，因为JSF默认使用#作为el表达式的起始符，所以应该写成#{pageContext.request.contextPath}
因为JSP2.0之前的版本不支持文本模板中的el表达式，故可以使用嵌入java代码来实现，和Servlet中一样
如果在JSP2.0之前的版本中使用了JSTL标签（el表达式的概念是JSTL 1.0推出来的），所以仍然可以配合JSTL的标签使用el表达式输出当前Web应用路径(context path)&lt;img src=&quot;http://www1.feedsky.com/t1/335321227/zhlwish/feedsky/s.gif?r=http://item.feedsky.com/~feedsky/zhlwish/~8011581/335321227/6047504/1/item.html&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/zhlwish/335321227/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/zhlwish/335321227/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description><category>Web开发</category><category>servlet</category><category>jsp</category><category>JSF</category><category>web后台</category><pubDate>Fri, 04 Dec 2009 14:36:17 +0800</pubDate><author>周 亮</author><comments>http://www.zhlwish.com/2009/12/04/servlet_jsp_context_path/#comments</comments><guid isPermaLink="false">http://www.zhlwish.com/?p=112</guid><dc:creator>周 亮</dc:creator><fs:srclink>http://www.zhlwish.com/2009/12/04/servlet_jsp_context_path/</fs:srclink><fs:srcfeed>http://www.zhlwish.com/feed</fs:srcfeed><fs:itemid>feedsky/zhlwish/~8011581/335321227/6047504</fs:itemid></item></channel></rss>