﻿<?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-玩转Java</title><link>http://www.blogjava.net/jacky9881/</link><description>玩转Java</description><language>zh-cn</language><lastBuildDate>Tue, 02 Dec 2008 21:15:00 GMT</lastBuildDate><pubDate>Tue, 02 Dec 2008 21:15:00 GMT</pubDate><ttl>60</ttl><item><title>08年奥运</title><link>http://www.blogjava.net/jacky9881/archive/2008/08/12/221519.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Tue, 12 Aug 2008 07:59:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/08/12/221519.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/221519.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/08/12/221519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/221519.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/221519.html</trackback:ping><description><![CDATA[<p>なつ休み。<br />
奥运来了，暑假也来了。<br />
今年真爽，奥运在ペキン举行，公司也真好在这段时间放暑假，可以天天待在电视跟前，见证中国金牌一块块诞生了，今年俄罗斯好像不太行呀，至今未获金牌，美国队实力还是很大的，田径和游泳，是金牌大户，也是美国队的强项，希望今年中国能夺得金牌总数第一，好运北京，好运中国。<br />
</p>
<img src ="http://www.blogjava.net/jacky9881/aggbug/221519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-08-12 15:59 <a href="http://www.blogjava.net/jacky9881/archive/2008/08/12/221519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JVM terminated.Exit code=1.</title><link>http://www.blogjava.net/jacky9881/archive/2008/07/27/217880.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Sun, 27 Jul 2008 13:22:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/07/27/217880.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/217880.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/07/27/217880.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/217880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/217880.html</trackback:ping><description><![CDATA[最近在升级JDK版本后，启动Eclipse时候，遇到这样的问题：<br />
JVM terminated.Exit code=1.<br />
在网上找了些资料，找到了解决方法。<br />
只要修改eclipse.ini文件即可。修改内容如下：<br />
-startup<br />
plugins\org.eclipse.equinox.launcher_1.0.100.v20080509-1800.jar<br />
--launcher.library<br />
plugins\org.eclipse.equinox.launcher.win32.win32.x86_1.0.100.v20080509-1800<br />
-showsplash<br />
<strong><em style="color: #ff0000">vm<br />
D:\Java\jdk15011\bin\javaw.exe<br />
</em></strong>org.eclipse.platform<br />
--launcher.XXMaxPermSize<br />
256m<br />
-vmargs<br />
-Xms40m<br />
-Xmx256m<br />
其中粗体部分为新增内容。 
<img src ="http://www.blogjava.net/jacky9881/aggbug/217880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-07-27 21:22 <a href="http://www.blogjava.net/jacky9881/archive/2008/07/27/217880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>五一西游记</title><link>http://www.blogjava.net/jacky9881/archive/2008/05/05/198551.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Mon, 05 May 2008 12:20:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/05/05/198551.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/198551.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/05/05/198551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/198551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/198551.html</trackback:ping><description><![CDATA[注意，我这个西游，是指去山西和陕西。<br />
<br />
<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">4.30</span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">号上午，乘坐大巴，赶往机场，经过两个多小时的飞行，终于到达目的地：西安咸阳国际机场，下了飞机后，在导游的带领下，去西安大雁塔广场转了一圈，绕大雁塔广场转了一圈，广场上人特别多。那天西安特别热，有</span><span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">30</span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">度左右，逛了一会儿，就去住的地方了。<br />
<br />
<span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">军安王朝大酒店，这个酒店条件还挺不错。回去后，由于一天的旅途，感觉特别累，洗完澡，就睡了。<br />
</span><br />
<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">5.1</span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">号，这天起了个大早，因为今天的旅程安排的比较紧张，首先去法门寺，去参观释迦摩尼的舍利子，去了之后，人太多了，听导游讲了这个舍利子的一些传奇故事以及释迦摩尼的传奇人生。<br />
&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中午吃完饭，去参观唐永泰公主的坟墓，这永泰公主是武则天的孙女，由于私下议论武则天的私生活，被武则天知道后，乱棍打死，很残忍。后来，武则天死后，修的坟墓。<br />
<br />
<span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">参观完永泰小姐的坟墓后，接下来就去参观武大姐下榻的地方了－－乾陵。原来这陵是武大姐和她老公－唐高宗李治的合葬墓。规模相当庞大，神道比南京的明孝陵要大多了，神道旁边立着武则天的无字碑。</span><br />
<br />
<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">5.2</span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">号，今天的行程也比较紧张，要去参观华清池和兵马俑。首先去的是华清池，其实也没有什么，就是杨美人和李帅哥洗澡的地方，现在他们洗澡的地方也没有水了，就几个浴缸在那儿。还有老佛爷和老蒋去度假的地方，后来在那儿发生了西安事变，老蒋就在华清池里面的兵谏亭被软禁了，原来那亭子不叫兵谏亭，而叫捉蒋厅，后来为了缓和两岸关系，改名的。<br />
<br />
<span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">参观完之后，接下来去了秦陵地宫，由于现在的技术还没有达到可以挖掘秦陵的程度，运用了遥感技术，模拟出来秦岭的形状，里面很黑，做的很逼真，秦始皇躺在一个棺材里面，旁边是水银做的河流，周围是一些秦始皇登基时的场景，匆匆的转了一圈，就出来了，最后就去参观兵马俑了，里面的人简直太多，老外好像比中国人多，这个博物馆也挣了老外不少钱呀，号称世界第八大奇迹。依次参观了三号，二号和一号炕，其中一号炕规模最大，当年，克林顿来的时候，曾经在里面拍照留念。参观完之后，当晚坐火车去山西平遥</span>。<br />
<br />
<span lang="EN-US" style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">5.3</span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">号，天刚蒙蒙亮，就在平遥火车站下车了，由于坐的火车比较破，晚上很热，没有睡好。人感觉比较困，刚出站，导游就带我们上车，绕古城转了一圈，介绍了一下平遥的一些历史知识，接下来就去吃早饭，吃完之后，直奔祁县，参观乔家大院，在那里曾经拍摄过连续剧</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"> </span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">乔家大院</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"> </span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">电影</span><span style="font-size: 10.5pt; font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"> </span><span style="font-size: 10.5pt; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-family: 'Times New Roman'">大红灯笼高高挂，参观完之后，下午就去参观古城平遥了，也是世界文化遗产，号称明清时候中国的华尔街，中国第一家银行就在这儿诞生了</span>。<br />
</span></span></p>
</span></span>
<img src ="http://www.blogjava.net/jacky9881/aggbug/198551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-05-05 20:20 <a href="http://www.blogjava.net/jacky9881/archive/2008/05/05/198551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse插件开发问题二</title><link>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 23 Apr 2008 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/195233.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/195233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/195233.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">问题描述：</span></p>
<p><span style="font-family: 宋体">最近在做</span>Eclipse<span style="font-family: 宋体">插件开发的时候，在国际化的问题上遇到这样问题，比如我的</span>plugin.xml<span style="font-family: 宋体">文件中，通过</span>%xxx<span style="font-family: 宋体">来引用</span>plugin_zh.properties<span style="font-family: 宋体">中对应键</span>xxx<span style="font-family: 宋体">的信息时，在插件运行时，相应的信息显示不了，后来进过研究，发现是由于在</span>MANIFEST.MF<span style="font-family: 宋体">少配置了一项造成的</span></p>
<p>Bundle-Localization: plugin<span style="font-family: 宋体">，</span></p>
<p><span style="font-family: 宋体">而这一项配置我在</span>Overview<span style="font-family: 宋体">标签页上没有找到相应设置的地方，把这个在</span>MANIFEST.MF<span style="font-family: 宋体">加上，插件在运行时，就可以显示</span>plugin_zh.properties<span style="font-family: 宋体">中定义的消息了。</span></p>
<img src ="http://www.blogjava.net/jacky9881/aggbug/195233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-04-23 19:44 <a href="http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse插件开发中的问题一</title><link>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 23 Apr 2008 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/195232.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/195232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/195232.html</trackback:ping><description><![CDATA[&nbsp; <span style="font-family: 宋体">问题描述：</span>
<p><span style="font-family: 宋体">最近在</span>Eclipse<span style="font-family: 宋体">插件开发中遇到这样的问题，我使用如入扩展点<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">extension<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">point</span><span style="color: #0000ff">="org.eclipse.debug.ui.launchConfigurationTabs"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tab<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="com.example.launch.SqlDebugTab"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group</span><span style="color: #0000ff">="org.eclipse.jdt.debug.ui.launchConfigurationTabGroup.localJavaApplication"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="&nbsp;com.example.launchs.SqlDebugTab"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="SqlDebugTab"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">associatedDelegate<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">delegate</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">associatedDelegate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tab</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">extension</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">extension<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">point</span><span style="color: #0000ff">="org.eclipse.debug.core.launchDelegates"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">launchDelegate<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">delegate</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modes</span><span style="color: #0000ff">="debug"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="org.eclipse.jdt.launching.localJavaApplication"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">launchDelegate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">extension</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就是在调式</span><span lang="EN-US">Java Application</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对话框中，增加一个</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页，</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页的名字为</span><span lang="EN-US">SqlDebugTab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在这个</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页上增加几个复选框，复选框要显示视图的名称，如果用户选择某个复选框，点&#8220;</span><span lang="EN-US">Debug</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;后，将显示指定的视图，可是在</span><span lang="EN-US">com.example.launch.SqlDebugLaunchDelegate</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类中的</span><span lang="EN-US">launch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法中调用</span><span lang="EN-US">PlatformUI.getWorkbench().getActiveWorkbenchWindow()</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，得到的对象却为</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调试程序才发现，运行</span><span lang="EN-US">com.example.launch.SqlDebugLaunchDelegate</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类是，走的是新线程，也就是说点&#8220;</span><span lang="EN-US">Debug</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;按钮时，</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">平台启动的是新的线程（非</span><span lang="EN-US">UI</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">线程），而在新线程中是取不到</span><span lang="EN-US">ActiveWorkbenchWindow</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，为了解决这个问题</span><span lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">花费了很多时间，最后终于找到解决方法</span><span lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US">launch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法通过如下程序来显示视图，就可以解决上面遇到的问题：</span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_64_253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_253_Open_Text.style.display='none'; Codehighlighter1_64_253_Closed_Image.style.display='inline'; Codehighlighter1_64_253_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_253_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_253_Closed_Text.style.display='none'; Codehighlighter1_64_253_Open_Image.style.display='inline'; Codehighlighter1_64_253_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">PlatformUI.getWorkbench().getDisplay().asyncExec(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Runnable()&nbsp;</span><span id="Codehighlighter1_64_253_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_64_253_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_87_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_251_Open_Text.style.display='none'; Codehighlighter1_87_251_Closed_Image.style.display='inline'; Codehighlighter1_87_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_87_251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_87_251_Closed_Text.style.display='none'; Codehighlighter1_87_251_Open_Image.style.display='inline'; Codehighlighter1_87_251_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_87_251_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_87_251_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IWorkbenchWindow&nbsp;window&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PlatformUI.getWorkbench()<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getActiveWorkbenchWindow();<br />
<img id="Codehighlighter1_203_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_249_Open_Text.style.display='none'; Codehighlighter1_203_249_Closed_Image.style.display='inline'; Codehighlighter1_203_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_203_249_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_203_249_Closed_Text.style.display='none'; Codehighlighter1_203_249_Open_Image.style.display='inline'; Codehighlighter1_203_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(window&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_203_249_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_203_249_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.getActivePage().showView（</span><span style="color: #000000">"</span><span style="color: #000000">&#8230;&#8230;</span><span style="color: #000000">"</span><span style="color: #000000">）；<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
</span>
<img src ="http://www.blogjava.net/jacky9881/aggbug/195232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-04-23 19:41 <a href="http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十二（复制粘贴部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Thu, 17 Jan 2008 00:27:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175815.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175815.html</trackback:ping><description><![CDATA[要在编辑器中支持复制，粘贴功能，首先，要在编辑器中选择活动节点，Eclipse工作台的菜单中复制，粘贴按钮处于激活状态，要实现这功能，我们还必须做些配置，因为编辑器没有单独的菜单栏，所有编辑器共享一个菜单栏，前面我们在定义编辑器扩展点时，有一个属性contributorClass没有指定值，它的值应该是一个实现IEditorActionBarContributor接口的类的全名，只有指定这个属性，菜单栏中的菜单项才能够对我们在编辑器中所做的操作进行相应；<br />
首先，我们增加属性contributorClass对应的类：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.ActionBarContributor;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_209_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_377_Open_Text.style.display='none'; Codehighlighter1_209_377_Closed_Image.style.display='inline'; Codehighlighter1_209_377_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_209_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_209_377_Closed_Text.style.display='none'; Codehighlighter1_209_377_Open_Image.style.display='inline'; Codehighlighter1_209_377_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WorkflowActionContributor&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionBarContributor&nbsp;</span><span id="Codehighlighter1_209_377_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_209_377_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_254_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_260_Open_Text.style.display='none'; Codehighlighter1_254_260_Closed_Image.style.display='inline'; Codehighlighter1_254_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_254_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_254_260_Closed_Text.style.display='none'; Codehighlighter1_254_260_Open_Image.style.display='inline'; Codehighlighter1_254_260_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;buildActions()&nbsp;</span><span id="Codehighlighter1_254_260_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_254_260_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_317_373_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_373_Open_Text.style.display='none'; Codehighlighter1_317_373_Closed_Image.style.display='inline'; Codehighlighter1_317_373_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_317_373_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_317_373_Closed_Text.style.display='none'; Codehighlighter1_317_373_Open_Image.style.display='inline'; Codehighlighter1_317_373_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;declareGlobalActionKeys()&nbsp;</span><span id="Codehighlighter1_317_373_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_317_373_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addGlobalActionKey(ActionFactory.COPY.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>在declareGlobalActionKeys增加对复制命令的申明，同时把属性contributorClass指定为这个类，包含全路径。再定义复制动作CopyAction，代码如下：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.SelectionAction;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IWorkbenchPart;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_221_394_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_394_Open_Text.style.display='none'; Codehighlighter1_221_394_Closed_Image.style.display='inline'; Codehighlighter1_221_394_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_221_394_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_221_394_Closed_Text.style.display='none'; Codehighlighter1_221_394_Open_Image.style.display='inline'; Codehighlighter1_221_394_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CopyAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;SelectionAction</span><span id="Codehighlighter1_221_394_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_221_394_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_264_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_264_319_Open_Text.style.display='none'; Codehighlighter1_264_319_Closed_Image.style.display='inline'; Codehighlighter1_264_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_264_319_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_264_319_Closed_Text.style.display='none'; Codehighlighter1_264_319_Open_Image.style.display='inline'; Codehighlighter1_264_319_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;CopyAction(IWorkbenchPart&nbsp;part)&nbsp;</span><span id="Codehighlighter1_264_319_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_264_319_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(part);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setId(ActionFactory.COPY.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_371_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_391_Open_Text.style.display='none'; Codehighlighter1_371_391_Closed_Image.style.display='inline'; Codehighlighter1_371_391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_371_391_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_371_391_Closed_Text.style.display='none'; Codehighlighter1_371_391_Open_Image.style.display='inline'; Codehighlighter1_371_391_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;calculateEnabled()&nbsp;</span><span id="Codehighlighter1_371_391_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_371_391_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>&nbsp;</p>
<p><br />
注意构造函数中一定要把这个action的id设置为ActionFactory.COPY.getId()，和前面统一起来；</p>
<p>到这儿还没有结束，还必须在编辑器类中注册这个action，覆盖编辑器父类中的createActions()方法：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_31_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_219_Open_Text.style.display='none'; Codehighlighter1_31_219_Closed_Image.style.display='inline'; Codehighlighter1_31_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_31_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_219_Closed_Text.style.display='none'; Codehighlighter1_31_219_Open_Image.style.display='inline'; Codehighlighter1_31_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;createActions()&nbsp;</span><span id="Codehighlighter1_31_219_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_31_219_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.createActions();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;CopyAction&nbsp;copyAction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CopyAction((IWorkbenchPart)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getActionRegistry().registerAction(copyAction);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getSelectionActions().add(copyAction.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
但是当我们在复制按钮可用情况，点击之后，我们希望把我们选择的对象，拷贝到剪切板上，这个在其他软件中已经成功实现，但要是在我们开发的流程设计器中，要实现这个功能，我们还必须自己写代码来实现，必须重写CopyAction父类中的run方法，把我们选择的对象放到剪切板上，代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_18_85_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_85_Open_Text.style.display='none'; Codehighlighter1_18_85_Closed_Image.style.display='inline'; Codehighlighter1_18_85_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_85_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_85_Closed_Text.style.display='none'; Codehighlighter1_18_85_Open_Image.style.display='inline'; Codehighlighter1_18_85_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_18_85_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_18_85_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Clipboard.getDefault().setContents(</span><span style="color: #0000ff">super</span><span style="color: #000000">.getSelectedObjects());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>这样当我们点复制按钮之后，流程设计器就把我们选择的内容放到剪切板上，下一步要做的就是粘贴了。</p>
<p>要使粘贴按钮可用，所做的修改和复制类似，在类WorkflowActionContributor 的方法declareGlobalActionKeys中增加addGlobalActionKey(ActionFactory.PASTE.getId())</p>
<p>增加PasteAction类，代码如下：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.Clipboard;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.SelectionAction;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IWorkbenchPart;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_267_523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_523_Open_Text.style.display='none'; Codehighlighter1_267_523_Closed_Image.style.display='inline'; Codehighlighter1_267_523_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_267_523_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_267_523_Closed_Text.style.display='none'; Codehighlighter1_267_523_Open_Image.style.display='inline'; Codehighlighter1_267_523_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PasteAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;SelectionAction</span><span id="Codehighlighter1_267_523_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_267_523_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_311_367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_367_Open_Text.style.display='none'; Codehighlighter1_311_367_Closed_Image.style.display='inline'; Codehighlighter1_311_367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_311_367_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_311_367_Closed_Text.style.display='none'; Codehighlighter1_311_367_Open_Image.style.display='inline'; Codehighlighter1_311_367_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;PasteAction(IWorkbenchPart&nbsp;part)&nbsp;</span><span id="Codehighlighter1_311_367_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_311_367_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">(part);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setId(ActionFactory.PASTE.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_419_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_419_520_Open_Text.style.display='none'; Codehighlighter1_419_520_Closed_Image.style.display='inline'; Codehighlighter1_419_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_419_520_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_419_520_Closed_Text.style.display='none'; Codehighlighter1_419_520_Open_Image.style.display='inline'; Codehighlighter1_419_520_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;calculateEnabled()&nbsp;</span><span id="Codehighlighter1_419_520_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_419_520_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_471_491_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_491_Open_Text.style.display='none'; Codehighlighter1_471_491_Closed_Image.style.display='inline'; Codehighlighter1_471_491_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_471_491_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_491_Closed_Text.style.display='none'; Codehighlighter1_471_491_Open_Image.style.display='inline'; Codehighlighter1_471_491_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(Clipboard.getDefault().getContents()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_471_491_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_471_491_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_496_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_496_517_Open_Text.style.display='none'; Codehighlighter1_496_517_Closed_Image.style.display='inline'; Codehighlighter1_496_517_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_496_517_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_496_517_Closed_Text.style.display='none'; Codehighlighter1_496_517_Open_Image.style.display='inline'; Codehighlighter1_496_517_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #0000ff">else</span><span id="Codehighlighter1_496_517_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_496_517_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
这里对Paste菜单的可用性作了判断，只有当剪切板中内容不为空时，粘贴按钮才可用，否则为不可用状<br />
态。<br />
另外还要在编辑器中对这个action进行申明，<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">PasteAction&nbsp;pasteAction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PasteAction((IWorkbenchPart)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />getActionRegistry().registerAction(pasteAction);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />getSelectionActions().add(pasteAction.getId());</span></div>
到这里，当我们在编辑器中选择活动，选择复制之后，粘贴按钮可用，但点粘贴按钮具体做什么，我们还没有定义，要实现这个做什么功能，还必须覆盖PasteAction父类中的run方法：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_18_559_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_559_Open_Text.style.display='none'; Codehighlighter1_18_559_Closed_Image.style.display='inline'; Codehighlighter1_18_559_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_559_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_559_Closed_Text.style.display='none'; Codehighlighter1_18_559_Open_Image.style.display='inline'; Codehighlighter1_18_559_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_18_559_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_18_559_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(List)Clipboard.getDefault().getContents();<br />
<img id="Codehighlighter1_110_556_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_556_Open_Text.style.display='none'; Codehighlighter1_110_556_Closed_Image.style.display='inline'; Codehighlighter1_110_556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_556_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_556_Closed_Text.style.display='none'; Codehighlighter1_110_556_Open_Image.style.display='inline'; Codehighlighter1_110_556_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">list.size();i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_110_556_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_110_556_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractActivityEditPart&nbsp;part&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(AbstractActivityEditPart)list.get(i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractActivity&nbsp;model&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(AbstractActivity)part.getModel();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WorkflowProcess&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(WorkflowProcess)part.getParent().getModel();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AbstractActivity&nbsp;clone&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AbstractActivity();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone.setName(</span><span style="color: #000000">"</span><span style="color: #000000">CloneActivity</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone.setLocation(model.getLocation());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone.setSize(model.getSize());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clone.setFigure(model.getFigure());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent.addChild(clone);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
这里只是做了一下简单处理，更复杂的逻辑用户可以根据自己应用的需要，这里的run可以通过执行一个命令，以支持撤销，重做功能，原理就是这样的，另外剪切功能和这类似，只是在复制基础上多了个删除操作。
<img src ="http://www.blogjava.net/jacky9881/aggbug/175815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-17 08:27 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts,Spring,Hibernate Web应用开发4</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/16/175701.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 16 Jan 2008 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/16/175701.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175701.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/16/175701.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175701.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175701.html</trackback:ping><description><![CDATA[这节介绍如何在SSH框架中使用Validator框架，Validator框架采用基于xml文件来配置验证规则，它主要依赖两个jar包：commons-validator-1.3.0.jar和oro-2.0.8.jar，要在SSH使用Validator框架，必须把这两个jar包引用进来，其实Struts框架已包含这两个jar包，所以我们不用再单独引入了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要在SSH框架中使用Validator，更确切的说是在Struts框架中使用，可以采用插件机制把Validator加入到框架，这需要修改原来的struts-config.xml文件，增加配置ValidatorPlugIn插件，代码如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">plug-in&nbsp;</span><span style="color: #ff0000">className</span><span style="color: #0000ff">="org.apache.struts.validator.ValidatorPlugIn"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">set-property&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="pathnames"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="/org/apache/struts/validator/validator-rules.xml,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />/WEB-INF/validation.xml"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">set-property&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="stopOnFirstError"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">plug-in</span><span style="color: #0000ff">&gt;</span></div>
这样当应用启动时，Struts框架就会加载ValidatorPlugIn插件。<br />
validator-rules.xml文件是Validator框架自带的，它定义了一些常有的校验规则，而validation.xml是我们自己定义的，它针对某个应用，内容如下：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;?</span><span style="color: #ff00ff">xml&nbsp;version="1.0"&nbsp;encoding="iso-8859-1"</span><span style="color: #0000ff">?&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;form-validation&nbsp;PUBLIC<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Commons&nbsp;Validator&nbsp;Rules&nbsp;Configuration&nbsp;1.3.0//EN"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://jakarta.apache.org/commons/dtds/validator_1_3_0.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-validation</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">formset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="registerForm"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="register.username"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="required"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="register.username"</span><span style="color: #ff0000">&nbsp;position</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="register.password"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="required,minlength"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="register.password"</span><span style="color: #ff0000">&nbsp;position</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="minlength"</span><span style="color: #ff0000">&nbsp;key</span><span style="color: #0000ff">="${var:minlength}"</span><span style="color: #ff0000">&nbsp;resource</span><span style="color: #0000ff">="false"</span><span style="color: #ff0000">&nbsp;position</span><span style="color: #0000ff">="1"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">var</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">var-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">minlength</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">var-name</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">var-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">6</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">var-value</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">var</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">field&nbsp;</span><span style="color: #ff0000">property</span><span style="color: #0000ff">="register.email"</span><span style="color: #ff0000">&nbsp;depends</span><span style="color: #0000ff">="required,email"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">arg&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="register.email"</span><span style="color: #ff0000">&nbsp;position</span><span style="color: #0000ff">="0"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">field</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">formset</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-validation</span><span style="color: #0000ff">&gt;</span></div>
<p>&nbsp;</p>
<p>form元素的name属性指定要进行验证的表单，field元素的property属性指定要验证属性，depends定义了验证方式，在这里，我们定义了username属性不能为空，password属性不能为空，并且最小长度不能小于6，email属性必须是合法的邮件地址。定义验证方式之后，我们还必须修改资源文件registermessages.properties，增加以下内容：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">#&nbsp;Errors<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />errors.header=</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">fontcolor</span><span style="color: #0000ff">="red"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">ValidationError</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">font</span><span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">h3</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Youmustcorrectthefollowingerror(s)beforeproceeding:<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />errors.required={0}isrequired.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />errors.minlength={0}cannotbelessthan{1}characters.<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />errors.email={0}isaninvalide-mailaddress.</span></div>
这资源文件中{0}对应着&lt;arg key="" position="0"/&gt;，{1}对应着&lt;arg key="" position="1"/&gt;，以此类推，如果有验证错误产生，将用key的值替换{n}<br />
&nbsp;<br />
此外，我们还要修改struts-config.xml文件，修改内容见粗体：<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">//把原来的DynaActionForm&nbsp;改为DynaValidatorForm<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-bean&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="registerForm"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="org.apache.struts.validator.DynaValidatorForm"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form-property&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="register"</span><span style="color: #ff0000">&nbsp;type</span><span style="color: #0000ff">="test.register.entity.Register"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-bean</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form-beans</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />//把原来的validate="false"改为validate="true"<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action-mappings</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">action&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="registerForm"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/register"</span><span style="color: #ff0000">&nbsp;scope</span><span style="color: #0000ff">="request"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type</span><span style="color: #0000ff">="test.register.action.RegisterAction"</span><span style="color: #ff0000">&nbsp;validate</span><span style="color: #0000ff">="true"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input</span><span style="color: #0000ff">="/register.jsp"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">forward&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="success"</span><span style="color: #ff0000">&nbsp;path</span><span style="color: #0000ff">="/registerSuccess.jsp"</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">action-mappings</span><span style="color: #0000ff">&gt;</span></div>
<br />
修改错误显示的样式，我们在register.jsp中，替换原来&lt;html/errors&gt;为<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">logic:messagesPresent</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">bean:message&nbsp;</span><span style="color: #ff0000">key</span><span style="color: #0000ff">="errors.header"</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html:messages&nbsp;</span><span style="color: #ff0000">id</span><span style="color: #0000ff">="error"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">bean:write&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="error"</span><span style="color: #0000ff">/&gt;&lt;/</span><span style="color: #800000">li</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html:messages</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">ul</span><span style="color: #0000ff">&gt;&lt;</span><span style="color: #800000">hr&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">logic:messagesPresent</span><span style="color: #0000ff">&gt;</span></div>
<br />
注意在页面上加入<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #0000ff">&lt;</span><span style="color: #800000">%@&nbsp;taglib&nbsp;</span><span style="color: #ff0000">uri</span><span style="color: #0000ff">="http://struts.apache.org/tags-logic"</span><span style="color: #ff0000">&nbsp;prefix</span><span style="color: #0000ff">="logic"</span><span style="color: #ff0000">&nbsp;%</span><span style="color: #0000ff">&gt;</span></div>
<br />
这样，我们运行程序，校验失败的效果如图：<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/jacky9881/1218afbd66724ae8affa8bae412fafac.jpg" _fcksavedurl="http://p.blog.csdn.net/images/p_blog_csdn_net/jacky9881/1218afbd66724ae8affa8bae412fafac.jpg" />
<img src ="http://www.blogjava.net/jacky9881/aggbug/175701.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-16 15:21 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/16/175701.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十一（扩展点部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 16 Jan 2008 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175576.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175576.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;到目前为止，一个完整的流程设计器已基本完成，为了增加系统的可扩展性，比如目前活动的类型有三种，假如以后我们要增加活动的类型，怎么办？按照目前的做法，我们只能修改代码，为了使系统的扩展性更好，即我们如果要增加活动类型，只需要修改配置文件，而无须修改现有系统的代码，为此，我们把活动类型定义一个扩展点，用户以后要增加活动类型，只需扩展这个扩展点就可以了。（代码）在plugin.xml...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-16 08:42 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十（新建向导部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Tue, 15 Jan 2008 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175352.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175352.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;这一节主要介绍如何通过新建向导，来新建我们扩展的文件(.workflow),要在新建增加内容，必须扩展org.eclipse.ui.newWizards，因此我们要修改plugin.xml文件，增加内容如下：(代码下载)&lt;extension&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point="org.ec...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-15 08:45 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发九（属性页部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Mon, 14 Jan 2008 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175062.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175062.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这一节主要介绍如何给编辑器增加属性页，属性页主要用来显示编辑器中选中对象的属性的，比如在编辑器选中活动，可以在属性页上显示活动的大小和位置等信息，要实现这一功能，首先要让模型实现IPropertySource接口，我们让模型的基类ModelElement实现这个接口，基类要实现这接口中六个方法，这六个方法如下：/**&nbsp;*//**&nbsp;An&nbsp;empty&nbsp;p...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-14 08:59 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>