<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>benben@编码</title>
    <description>网名：笨笨
喜欢软件开发及一切有创造性的东西。</description>
    <link>http://bencode.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>C/C++中复杂的申明</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/235801" style="color:red;">http://bencode.javaeye.com/blog/235801</a>&nbsp;
          发表时间: 2008年09月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天一朋友(估计要考二级了)问我:  int * a[];  这玩意儿到底是指针还是数组.  我告诉他, 这是数组, 里<br /><br />面放的是 指针. 不过我怕他又问相似的, 所以就告诉他"读"的方法<br /><br /><br />我想可能会对C,或者C++的初学者有用, 所以就发在这里了. 高手请不要笑哦!<br /><br /><br />先来几个简单的<br /><br /><br /><pre name="code" class="c">
int a;      // 一个整形

int * a;    // 一个指针, 批向一个整形 (整形指针)

int * a();  // 一个函数, 反回一个整形指针

int * a[10];  // 一个数组, 里面存放着整形指针

int (*a)();  // 一个指针, 指向一个函数, 该函数返回整形

int (*a)[];   // 一个指针, 指向一个数组, 数组里放着整形
</pre><br /><br />上面的问题不大哦, 下面先给出读的方法<br /><br />从左向右看, 找到第一个标识符, 上例中就是 a<br />  1.先往右看, 如果是 [..] 那么 读作"a 是一个数组", 接下来的东西,就是数组元素的类型,和大小了  <br />    如果是 "(...)"  那么就是一个函数, 剩下的就是描述函数的参数和返回值了<br />  2.再往左看..., 如果前缀是 * 那么读作 "a 是一个指针", 接下来分析指向什么.<br /><br /><br />一个一个来, 有点幼稚哦<br /><br /><pre name="code" class="c">

int * a();  // 从左向右看， 找到a, 再向右看， 是(), 那么"a是一个函数", 
            // 参数? 无, 返回值? int *, 哦, 是一个整形指针

int * a[10];  // 从左向右看, 找到 a, 再向右看, 是 [], 那么 "a 是一个数组"
              // 大小? 10, 类型? int *, 还是整形指针

int (*a)();  // 找到a, 被括号括住, 只能向左看, 是 *, 那么 "a 是一个指针"
            // 指向什么? 去掉分析过的部分, int XXX(), 哦, 是一个函数

int (*a)[10];  // 同样, "a 是一个指针", 
               // 指向什么? 去掉分析过的部分是? int XXX[10], 指向一个数组
</pre><br /><br /><br />来几个复杂一点的.<br /><br /><pre name="code" class="c">int * * (*a)();</pre><br /><br />从左向右看, 找到第一个标识符, a , 被括号括住了, 往左看, 是 *, 读作"a 是一个指针"<br /><br />指向什么? int ** XXX(); 哦, 是一个函数<br /><br />参数是? 空<br /><br />返回值: int **, 哦~~<br /><br />合起来就是: a 是一个指针, 该指针指向一个函数, 这个函数返回一个指针(返回的这个指针指向一个整形指<br /><br />针)<br /><br /><br />再来一个:<br /><br /><pre name="code" class="c">char *(*c[10])(int **p);             // 这个例子来自于Expert C Programming</pre><br /><br />一眼看过去想晕<br /><br />没事.<br /><br />从左到右找到了第一个标识符, c, 再往右看, 是[], 读作 "c 是一个数组"  <br /><br />数组的元素是什么<br /><br />先去掉分析过的部分是 char *(*XXX)(int **p)<br /><br />哦, XXX处开始, 往右看不下去, 往左看, 是*,  那么 "数组的元素是一个指针", 指向什么呢?<br /><br />再去掉分析过的部分, char *XXX(int **p);  到这一步基本上一眼就能看出了, 就不多废话了<br /><br />原来是指向一个函数: 这个函数的参数是 int **p, 返回值是 char *<br /><br /><br />合起来就是： c是一个数组， 这个数组大小是 10, 这个数组里面存放着 指针, 是一个函数指针， 这个函数<br /><br />指针的参数是 int **p, 返回值是 char *<br /><br />呵呵。 很容易吧!<br /><br /><br />等等， 加入const 好像更晕<br /><br />"const在指针左边修饰类型， 在指会右边，修饰指针"<br /><br /><pre name="code" class="c">const int * a;  // 指针指向的整形是 const的
int * const a;  // 指针a 是 const的</pre><br /><br /><br />声明中还可以加typedef哦 <br /><br />一般是<br /><br />typedef xxxxxxxxxxxxx;<br /><br />xxxx 的读取方法和上面的一模一样， 但仅仅引入一个新的名字，而不是为变量分配空间<br /><br />要读的话， 可以读作“a 表示一个...”, 而不是 "a 是一个...." <br /><br /><br />用 typedef 可以让我们轻松好多, 可以让我们一眼看出申明，或定义的东西<br /> <br />上面看过的这个复杂的东西：char *(*c[10])(int **p);<br /><br />可以变成这样<br /><br />typedef char * (*fun_ptr)(int **p);   //fun_ptr 表示一个函数指针, 用上述规则看<br /><br />那么上面的东东就是：<br />fun_ptr c[10];      // 一眼就能看出来了,里面是 fun_ptr<br /><br /><br />最后一个例子：<br /><br />void (*signal(int sig, void(*func)(int)))(int);   // 这个例子来自于Expert C Programming<br /><br /><br />从左往右看， 找到 signal, 再往右看， 是(...)   "signal 是一个函数"<br /><br /><br />参数是什么？ 看括号里面的 ( int sig, void(*func)(int) )<br /><br />             有两个参数， 第一个是 int, 第二个是  void (*func)(int), 是一个函数指针<br /><br />返回值是什么？ 先去掉分析过的部分， 变成 void (*XXXX)(int)<br /><br />            返回值是一个函数指针， 看，上面的第二个参数一样<br /><br /><br />合起来就是： signal是一个函数， 参数有两个， 一个是int ，还有一个是 函数指针<br />                                返回值是一个函数指针<br /><br /><br /><br />当然。typedef 后会比较直观<br /><br /><br /><br /><pre name="code" class="c">typedef void (*func_ptr)(int);    //给函数指针一个名字

func_ptr signal(int, func_ptr);   // 现在一看就明白了</pre>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/235801#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 02 Sep 2008 16:26:01 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/235801</link>
        <guid>http://bencode.javaeye.com/blog/235801</guid>
      </item>
      <item>
        <title>分享代码（CSS+Javascript实现圆角矩形)</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/130636" style="color:red;">http://bencode.javaeye.com/blog/130636</a>&nbsp;
          发表时间: 2007年10月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近做一个购物站点，页面前需要圆角矩形效果, 而我不想使用背景图来实现，大概我不是美工的原因， 所以就采用 javascript+css方式<br />
<br />
至于原理，我想大家都知道，就是用一象素高的长短不一的元素叠出圆角效果来<br />
<br />
你的眼睛欺骗了你的心<br />
<br />
在写自己的实现前，我知道以下两个实现圆角矩形的库<br />
<br />
Rico Round： <a href="http://openrico.org/demos?demo=effect_round">http://openrico.org/demos?demo=effect_round</a><br />
<br />
但是它依赖于rico的core等东东，不能独立使用，而我的项目中主要使用其他的js库（mootools)，不想因此引入rico<br />
<br />
还有一个是<br />
<br />
Nifty Corners Cube: <a href="http://www.html.it/articoli/niftycube/index.html">www.html.it/articoli/niftycube/index.html</a><br />
<br />
其实它基本上能满足我的要求： 独立的完整的实现，不依赖于其他库， 使用也很方便。而且具有丰富的demo可以参考<br />
<br />
但是它的代码占用了太多的顶层名字空间（我碰到了名字冲突），而且代码风格似乎不大好（55555，别给我扔鸡蛋）<br />
<br />
所以我就写了自己的实现，其&ldquo;工作代码&rdquo;，基本上是 参考 Nifty Corners Cube<br />
<br />
虽然重写了所有的代码（只有二百多行）， 但&ldquo;灵魂&rdquo;来源于 Nifty Corners Cube,&nbsp; 我仅仅做了重构的工作，并且使用的CSS也是直接来源于它，所以js的名称还是 Nifty。 <br />
<br />
demo 全部来自于 Nifty Corners Cube<br />
<br />
希望对大家有点帮助
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/130636#comments" style="color:red;">已有 <strong>6</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 10 Oct 2007 12:27:00 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/130636</link>
        <guid>http://bencode.javaeye.com/blog/130636</guid>
      </item>
      <item>
        <title>今天面试出了两个设计模式的题</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/123633" style="color:red;">http://bencode.javaeye.com/blog/123633</a>&nbsp;
          发表时间: 2007年09月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天面试时，叫我做一个卷子。<br />
里面有两道关于设计模式的题目。<br />
第一道叫我写五个设计模式，以及他们的使用场合。<br />
此题没什么，我就写了五个。<br />
<br />
第二题叫我写一个单例(单件)模式<br />
<br />
想起前段日子在javaeye看到的一帖子，大概是这个样子的：<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;Sington&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;SingtonHolder&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Sington&nbsp;INSTANCE&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;Sington();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;Sington&nbsp;getInstance()&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;SingtonHolder.INSTANCE;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;Sington()&nbsp;{&nbsp;}&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
哦， 延迟初级化，线程安全，不需要同步，代码简洁，很好。<br />
<br />
不过为了&ldquo;安全&rdquo;起见， 我还是给出了另两种大众化的Sington模式<br />
<br />
...
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/123633#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 13 Sep 2007 18:34:00 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/123633</link>
        <guid>http://bencode.javaeye.com/blog/123633</guid>
      </item>
      <item>
        <title>Web开发积累--浮动元素闭合</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/117275" style="color:red;">http://bencode.javaeye.com/blog/117275</a>&nbsp;
          发表时间: 2007年08月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          外围wrap层应用<em>overflow:auto;</em><em>_height:1%;<br />
<br />
见:<br />
</em><br />
<a href="http://annevankesteren.nl/2005/03/clearing-floats" title="http://annevankesteren.nl/2005/03/clearing-floats" target="_blank">http://annevankesteren.nl/2005/03/clearing-floats</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/117275#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 27 Aug 2007 21:44:03 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/117275</link>
        <guid>http://bencode.javaeye.com/blog/117275</guid>
      </item>
      <item>
        <title>CakePHP Validation</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/116756" style="color:red;">http://bencode.javaeye.com/blog/116756</a>&nbsp;
          发表时间: 2007年08月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          和Rails 一样,&nbsp; CakePHP的Model也有Validation<br />
<br />
它通过配置其 validate 数组, 就可以进行验证,&nbsp; 阅读了源码, 整理出 validate数组可能的结构, 以及验证的过程<br />
<br />
1. 首先, 如果重写了 beforeValidate,&nbsp; 那么它先处理这里的东东... 以决定是否进行下一步验证<br />
<br />
2. 然后才会根据 validate数组, 进行实际验证<br />
<br />
var validate =&gt; array(<br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; fileldName =&gt; ruleSet<br />
&nbsp;&nbsp;&nbsp; ...<br />
);<br />
<br />
validate 数组大概是以上结构. 那么 ruleSet, 可能具有哪些情况呢?<br />
<br />
ruleSet 可有三种情况:<br />
<br />
1. string, 可以是正则式, 方法名, 或者...(见下面)<br />
2. array('rule' =&gt; validator);&nbsp;&nbsp;&nbsp; 一个 key 为 rule 的单元素数组, <br />
3. array( <br />
&nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; index =&gt; validator<br />
&nbsp;&nbsp;&nbsp; ...<br />
)<br />
<br />
第三种情况,是最复杂的, 第一第二种其实是第三种的特殊情况<br />
它表示, 一个 field有很多个 validator, 需要通过所有 的 validator 才算通过<br />
<br />
那么 validator 可以是什么呢?<br />
<br />
1. string, 上面有过哦, 可以是正则式, 或者方法名 .. 或者...<br />
2. array(&nbsp;&nbsp;&nbsp; // 又是一个 array, 看来, 这个总的结构还可以真复杂呀<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp;  &nbsp;&nbsp; //&nbsp; array中大概可以具有以下元素. <br />
&nbsp;&nbsp;&nbsp; 'allowEmpty' =&gt; null,<br />
&nbsp;&nbsp;&nbsp; 'required' =&gt; null,<br />
&nbsp;&nbsp;&nbsp; 'rule' =&gt; 'blank',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 这里有个 rule 哦...<br />
&nbsp;&nbsp;&nbsp; 'last' =&gt; false,<br />
&nbsp;&nbsp;&nbsp; 'on' =&gt; null<br />
<br />
&nbsp;&nbsp;&nbsp; 'message' =&gt;null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 如果是空, 那么将被设置为:&nbsp; This field cannot be left blank<br />
)<br />
<br />
好了.. 总结.&nbsp;&nbsp; 其实最复杂的结构像是这样的:<br />
<br />
var validate =&gt; array(<br />
&nbsp;&nbsp;&nbsp; fileldName1 =&gt; ...<br />
&nbsp;&nbsp;&nbsp; fileldName2 =&gt; array{<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  &nbsp;&nbsp;&nbsp; index1 =&gt; ...<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; index2 =&gt; array(<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  'allowEmpty' =&gt; null,<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'required' =&gt; null,<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 'rule' =&gt; 'blank',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; 这里有个 rule 哦...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'last' =&gt; false,<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 'on' =&gt; null<br />
<br />
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp; 'message' =&gt;null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp;&nbsp; 如果是空, 那么将被设置为:&nbsp; This field cannot be left blank<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; )<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ...<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; ...<br />
);<br />
<br />
<br />
其他所有结构.都只不过是上面结构的特殊情形<br />
<br />
程序在分析这个 validate 字段, 然后构造了上面这个结构. 下面就开始验证了. 其验证过程比较简单哦:<br />
<br />
上面不是有 'on' 'allowEmpty' 这些字段吗?<br />
<br />
那么第一步<br />
<br />
1. 如果 empty(on) || (on == 'create' &amp;&amp; !exists) || (on == 'update' &amp;&amp; exists) 就进行验证<br />
<br />
说白了. 就是 on 为空, 或者为 'create' 而且数据库中没有相关记录,&nbsp; 或者为 'update' 而且数据库中具有相关记录, 那么进行验证<br />
<br />
所以, 我们验证的时候.可以在 网页上看到 debug信息,说是查询数据库用了多少毫秒(心里不知道怎么回事,明明没写什么find findAll)&nbsp; 原因就在这里.<br />
<br />
2. 然后根据 allowEmpty 以及 required 信息, 进行空与非空验证,&nbsp; 如果通过这步, 再进行 3<br />
<br />
3. 然后再根据 rule&nbsp; 进行验证 <br />
<br />
上面说了 rule 可以是 string(表示一个正则式, 或一个方法名), 但它其实还可以是一个 array <br />
<br />
如果 rule 是一个 array, 那么&nbsp; array[0] 这个元素, 就被作为 rule , 其余元素作为验证的参数<br />
<br />
等等. 验证不是对表单输入的数据进行验证的话? 是的.&nbsp; 所以 data[fieldName]. 就是需要验证的东东. <br />
<br />
所以. 最后. 验证参数, 是由两部分 combine 成的: 1. 表单值 2. rule 如果是 array. 除去第0个元素以外的其他元素<br />
<br />
好了. rule 有了. 他是一个string. 验定参数也有了. 下面看看怎么验证<br />
<br />
1. 首先找找. Model 中是否具有 string 同名的方法. 如果有. 调用它进行验证, 如果找不到. 见2<br />
2. 再看看 Validation 对象中看看是否具有相关的方法, 如果有. 进行验证&nbsp; 如果找不到 见3<br />
3. 如果是正则表达式,&nbsp; 验证<br />
<br />
验证失败后, 函数还要设置 message: 代码是这样的：<br />
<br />
if (!isset($validator['message'])) {<br />
&nbsp;&nbsp;&nbsp; if (is_string($index)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $validator['message'] = $index;<br />
&nbsp;&nbsp;&nbsp;&nbsp; } else {<br />
&nbsp;$validator['message'] = ife(is_numeric($index) &amp;&amp; count($ruleSet) &gt; 1, ($index + 1), $message);<br />
}<br />
<br />
index 有什么用， 这下清楚了吧.<br />
<br />
然后调用这个<br />
<br />
$this-&gt;invalidate($fieldName, $validator['message']);<br />
<br />
完成一个 field 的验证
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/116756#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 26 Aug 2007 02:28:13 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/116756</link>
        <guid>http://bencode.javaeye.com/blog/116756</guid>
      </item>
      <item>
        <title>Web开发积累</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/116685" style="color:red;">http://bencode.javaeye.com/blog/116685</a>&nbsp;
          发表时间: 2007年08月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div id="box1">&nbsp;</div>
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;box1&quot;</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class=""><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;box2&quot;</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">div</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">&quot;box3&quot;</span><span class="tag">&gt;</span><span class="tag"><!--</span--><span class="tag-name">div</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></span></li>
</ol>
</div>
<br />
<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="comment">/*</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">要将上面布局成</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment"></span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">-------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;box2&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">|&nbsp;&nbsp;&nbsp;box1&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">-------------&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;box3&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class=""><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|</span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">不知道正规的做法怎么样,&nbsp;当然,&nbsp;上面的网页结构内容不能改.&nbsp;</span>&nbsp;</span></li>
    <li class=""><span><span class="comment"></span>&nbsp;</span></li>
    <li class="alt"><span><span class="comment">我的做法是:&nbsp;在使用了&nbsp;float&nbsp;之后,&nbsp;对box3使用了负的&nbsp;margin-right</span> <br />
    </span></li>
    <li class="alt"><span>不过我觉得更好的方法是： 采用 position: absolute; 当然，要设置外围wrap的 position:relative.</span></li>
    <li class="alt"><span>这样才能相对于外围容器进行定位<br />
    </span></li>
</ol>
<ol class="dp-j" start="1">
    <li class=""><span><span class="comment">*/</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/116685#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 25 Aug 2007 22:01:13 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/116685</link>
        <guid>http://bencode.javaeye.com/blog/116685</guid>
      </item>
      <item>
        <title>Web开发积累</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/116684" style="color:red;">http://bencode.javaeye.com/blog/116684</a>&nbsp;
          发表时间: 2007年08月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">css 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-css" start="1">
    <li class="alt"><span><span class="comment">/*&nbsp;&nbsp;这样的东东IE不支持&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>input[type='text']&nbsp;{&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp; <br />
    </span></li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/116684#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 25 Aug 2007 21:52:34 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/116684</link>
        <guid>http://bencode.javaeye.com/blog/116684</guid>
      </item>
      <item>
        <title>两道笔试题</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/112251" style="color:red;">http://bencode.javaeye.com/blog/112251</a>&nbsp;
          发表时间: 2007年08月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天一朋友找工作, 碰到两道算法笔试题, 都是当于链表操作的.<br />
<br />
原题具体的还原不过来了, 不过大致是:<br />
<br />
1. 有一单链表, 找出最后第m个节点.<br />
<br />
&nbsp;昨天看到问题时,想到了小学应用题: <br />
<br />
汽车过山洞, 假如这个汽车开着开着, 等到车头刚要出山洞, 车尾离山洞出口也有一段距离嘛...<br />
<br />
这样, 这个题方法出来了<br />
<br />
<div class="code_title">cpp 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-cpp" start="1">
    <li class="alt"><span><span>Node*&nbsp;FindLastNode(Node*&nbsp;root,&nbsp;</span><span class="datatypes">int</span><span>&nbsp;m)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Node*&nbsp;head&nbsp;=&nbsp;root;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Node*&nbsp;tail&nbsp;=&nbsp;root;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;开始时,大概是这样</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---------------------|&nbsp;&nbsp;这个是山洞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个是车车?&nbsp;哦,&nbsp;是小蛇,&nbsp;身体盘在一起...</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;然后往前爬</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(</span><span class="datatypes">int</span><span>&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;m;&nbsp;++i)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;=&nbsp;head-&gt;next;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;此时</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---------------------|&nbsp;&nbsp;这个是山洞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;--------&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;一起前进吧</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(head-&gt;next)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;=&nbsp;head-&gt;next;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tail&nbsp;=&nbsp;tail-&gt;next;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;此时</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|---------------------|&nbsp;&nbsp;这个是山洞</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;--------&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;tail;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
当然,特殊情况要考虑, 不过那....<br />
<br />
<br />
2.&nbsp; 有一单链表, 判断是否存在环<br />
<br />
&nbsp;<br />
有环? 走着走着, 却突然发现, 怎么也走不完, 可是这要走到什么时候? 此法不通<br />
<br />
可是怎么也想不出好办法. 只有一个笨方法:<br />
<br />
看看现在走的路, 是不是已走过...<br />
<br />
<div class="code_title">cpp 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-cpp" start="1">
    <li class="alt"><span><span class="datatypes">bool</span><span>&nbsp;HasCircle(Node*&nbsp;root)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;Node*&nbsp;cur&nbsp;=&nbsp;root;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">while</span><span>&nbsp;(cur-&gt;next)&nbsp;{&nbsp;</span><span class="comment">//&nbsp;1&nbsp;号走到一个站，&nbsp;等</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">//&nbsp;派出2号，开始走，&nbsp;看是否更快地和1号相遇</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(Node*&nbsp;other&nbsp;=&nbsp;root;&nbsp;other-&gt;next&nbsp;!=&nbsp;cur;&nbsp;other&nbsp;=&nbsp;other-&gt;next)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(cur-&gt;next&nbsp;==&nbsp;other)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">true</span><span>;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;2号提前赶到，&nbsp;1&nbsp;号走冤枉路了</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cur&nbsp;=&nbsp;cur-&gt;next;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">false</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
<br />
对于2, 不知道有没有更好的办法?
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/112251#comments" style="color:red;">已有 <strong>3</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 14 Aug 2007 21:40:32 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/112251</link>
        <guid>http://bencode.javaeye.com/blog/112251</guid>
      </item>
      <item>
        <title>wxWidgets是个好东西</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/100094" style="color:red;">http://bencode.javaeye.com/blog/100094</a>&nbsp;
          发表时间: 2007年07月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近一个工具，由于是工具，本来是用SDK编写的，只是功能完成后，对界面不满意，但是苦于手头可用的东东有限。。。<br />
<br />
MFC？这玩意儿，我从大三开始研究，把各类宏，消息映射机理，搞得很清楚，看了《深入浅出MFC》不止两次，还搞不出东西，于是又看了《Programming Windows With MFC》终于好像能搞出一些DEMO， 后来碰到一聊友，说&ldquo;把MFC扔进垃圾堆，永远不要碰这种东西&hellip;&hellip;&rdquo;<br />
<br />
VCL！ 是个好东西，虽然不会Delphi，但C++ Builder也很好用，虽然对C++改了些语法和语意，嘿嘿。 Chuck 和 Anders这两个牛人。 <br />
<br />
SWT/JFace： 可以说这一年多一直在进行着基于Eclipse的RCP开发，所以对SWT/JFace也很熟悉，而且Java语法优美简洁，比起C++，写起来轻松多了（不仅是生理上的，而且是心理上的： 这个 new 要不要 delete，不行，应该用RAII， 参数不能是直接是类型，应该改成const引用以避免拷贝&hellip;&hellip; 哇，不想这些了，自然轻松和愉快）&nbsp; <br />
<br />
所以如果对方机子上有JVM，或者允许安装JVM的话， 我会选择SWT/JFace<br />
<br />
当然，如果对于大一些的窗口程序，使用 Eclipse RCP 简直酷B了！<br />
<br />
偶有一次，在使用Ruby，遇见 wxRuby，这东东的文档中提到了 wxWidgets， 于是就这样结识了它（本人我是古墓派）<br />
<br />
于是立马下载，安装，编译，哇噻！ 还有许许多多的 samplesssssssssss。除了自带的帮助，我还找到了一本由 Julian Smart(我以后就给我儿子取名叫&nbsp; &quot;X有钱&quot;) 亲自写的《Cross-Platform GUI Programming with wxWidgets》...<br />
<br />
然后我把我那个类似于资源管理器的小工具用 wxWidgets 重新写过。 果然不错<br />
<br />
我的手头又多了一样武器~~~<br />
<br />
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/100094#comments" style="color:red;">已有 <strong>10</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 11 Jul 2007 12:10:16 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/100094</link>
        <guid>http://bencode.javaeye.com/blog/100094</guid>
      </item>
      <item>
        <title>exrb 是个好东西</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/93712" style="color:red;">http://bencode.javaeye.com/blog/93712</a>&nbsp;
          发表时间: 2007年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Exerb is the software which converts scripts/extension-libraries of the object oriented language Ruby into a Windows executable file which can execute alone and independently.<br />
<br />
<a href="http://exerb.sourceforge.jp/index.en.html">exerb.sourceforge.jp/index.en.html</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/93712#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 24 Jun 2007 23:56:34 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/93712</link>
        <guid>http://bencode.javaeye.com/blog/93712</guid>
      </item>
      <item>
        <title>webwork自带的RestfulActionMapper弱了点</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/81622" style="color:red;">http://bencode.javaeye.com/blog/81622</a>&nbsp;
          发表时间: 2007年05月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Webwork 自带的 RestfulActionMapper弱了点<br />
<br />
首先， 像图片，js，css 等资源文件不大好印射（会出现 action 找不到错误)<br />
<br />
不支持namespace<br />
<br />
反向解析url 时，忽略了除id 以外的变量<br />
<br />
于是我写了一个稍微好点的 RestfulActionMapper, 也符合了我现在项目的要求<br />
<br />
其代码如下<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;com.longthsoft.hellomobile.webwork;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.net.URLDecoder;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.ArrayList;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.Arrays;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.HashMap;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;java.util.List;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.Map;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;java.util.Map.Entry;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;javax.servlet.http.HttpServletRequest;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;org.apache.commons.logging.Log;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;org.apache.commons.logging.LogFactory;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.webwork.RequestUtils;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.webwork.dispatcher.mapper.ActionMapper;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.webwork.dispatcher.mapper.ActionMapping;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.webwork.dispatcher.mapper.RestfulActionMapper;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork.config.ConfigurationManager;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;com.opensymphony.xwork.config.RuntimeConfiguration;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;BetterRestfulActionMapper&nbsp;</span><span class="keyword">implements</span><span>&nbsp;ActionMapper&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;Log&nbsp;LOG&nbsp;=&nbsp;LogFactory.getLog(RestfulActionMapper.</span><span class="keyword">class</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">private</span><span>&nbsp;</span><span class="keyword">static</span><span>&nbsp;</span><span class="keyword">final</span><span>&nbsp;String&nbsp;ID&nbsp;=&nbsp;</span><span class="string">&quot;id&quot;</span><span>;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;ActionMapping&nbsp;getMapping(HttpServletRequest&nbsp;request)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;uri&nbsp;=&nbsp;RequestUtils.getServletPath(request);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(uri.indexOf(</span><span class="string">'.'</span><span>,&nbsp;uri.length()&nbsp;-&nbsp;</span><span class="number">5</span><span>)&nbsp;!=&nbsp;-</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;pos1&nbsp;=&nbsp;uri.indexOf('/',&nbsp;</span><span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(pos1&nbsp;==&nbsp;-</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">null</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;part1&nbsp;=&nbsp;uri.substring(<span class="number">1</span><span>,&nbsp;pos1);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;namespace&nbsp;=&nbsp;<span class="string">&quot;&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;actionName;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;pos2&nbsp;=&nbsp;uri.indexOf('/',&nbsp;pos1&nbsp;+&nbsp;</span><span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(pos2&nbsp;==&nbsp;-</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actionName&nbsp;=&nbsp;part1;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri&nbsp;=&nbsp;uri.substring(pos1&nbsp;+&nbsp;<span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RuntimeConfiguration&nbsp;config&nbsp;=&nbsp;ConfigurationManager.getConfiguration()&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getRuntimeConfiguration();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;part2&nbsp;=&nbsp;uri.substring(pos1&nbsp;+&nbsp;<span class="number">1</span><span>,&nbsp;pos2);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(config.getActionConfigs().containsKey(</span><span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;part1))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;namespace&nbsp;=&nbsp;<span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;part1;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actionName&nbsp;=&nbsp;part2;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri&nbsp;=&nbsp;uri.substring(pos2&nbsp;+&nbsp;<span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">else</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;actionName&nbsp;=&nbsp;part1;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri&nbsp;=&nbsp;uri.substring(pos1&nbsp;+&nbsp;<span class="number">1</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;String&gt;&nbsp;list&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ArrayList&lt;String&gt;(Arrays.asList(uri.split(</span><span class="string">&quot;/&quot;</span><span>)));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(list.size()&nbsp;%&nbsp;</span><span class="number">2</span><span>&nbsp;==&nbsp;</span><span class="number">1</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list.add(<span class="number">0</span><span>,&nbsp;ID);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HashMap&lt;String,&nbsp;String&gt;&nbsp;params&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;HashMap&lt;String,&nbsp;String&gt;();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;list.size()&nbsp;/&nbsp;</span><span class="number">2</span><span>;&nbsp;++i)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">try</span><span>&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;URLDecoder.decode(list.get(<span class="number">2</span><span>&nbsp;*&nbsp;i),&nbsp;</span><span class="string">&quot;UTF-8&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;value&nbsp;=&nbsp;URLDecoder.decode(list.get(<span class="number">2</span><span>&nbsp;*&nbsp;i&nbsp;+&nbsp;</span><span class="number">1</span><span>),&nbsp;</span><span class="string">&quot;UTF-8&quot;</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params.put(name,&nbsp;value);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<span class="keyword">catch</span><span>&nbsp;(Exception&nbsp;ex)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LOG.warn(ex);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="keyword">new</span><span>&nbsp;ActionMapping(actionName,&nbsp;namespace,&nbsp;</span><span class="string">&quot;&quot;</span><span>,&nbsp;params);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;String&nbsp;getUriFromActionMapping(ActionMapping&nbsp;mapping)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;uri&nbsp;=&nbsp;mapping.getNamespace()&nbsp;+&nbsp;<span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;mapping.getName();&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map&nbsp;params&nbsp;=&nbsp;mapping.getParams();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(params.containsKey(ID))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri&nbsp;+=&nbsp;<span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;params.get(ID);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(Object&nbsp;o&nbsp;:&nbsp;mapping.getParams().entrySet())&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Entry&nbsp;entry&nbsp;=&nbsp;(Entry)&nbsp;o;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;name&nbsp;=&nbsp;(String)&nbsp;entry.getKey();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(!name.equals(ID))&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uri&nbsp;+=&nbsp;<span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;name&nbsp;+&nbsp;</span><span class="string">&quot;/&quot;</span><span>&nbsp;+&nbsp;entry.getValue();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;uri;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/81622#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 May 2007 21:33:23 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/81622</link>
        <guid>http://bencode.javaeye.com/blog/81622</guid>
      </item>
      <item>
        <title>引用其他插件的图标</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/74847" style="color:red;">http://bencode.javaeye.com/blog/74847</a>&nbsp;
          发表时间: 2007年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          有时候需要引用其他插件的图片<br />
比如，我有一个插件叫: com.longthsoft.rcppart.ui<br />
icons 目录下有 file.gif 图<br />
我在另一个插件中, 在plugin.xml 中，如果想引用此图片<br />
<br />
像这样： <br />
<div class="code_title">xml 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-xml" start="1">
    <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">editor</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="attribute">icon</span><span>=</span><span class="attribute-value">&quot;platform:/plugin/com.longthsoft.rcppart.ui/icons/file.gif&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;<span class="tag">/&gt;</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/74847#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Apr 2007 10:49:51 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/74847</link>
        <guid>http://bencode.javaeye.com/blog/74847</guid>
      </item>
      <item>
        <title>经验：奇怪的错误？</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/73068" style="color:red;">http://bencode.javaeye.com/blog/73068</a>&nbsp;
          发表时间: 2007年04月21日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>!ENTRY&nbsp;org.eclipse.ui&nbsp;</span><span class="number">4</span><span>&nbsp;</span><span class="number">0</span><span>&nbsp;</span><span class="number">2007</span><span>-</span><span class="number">04</span><span>-</span><span class="number">21</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">19</span><span>:</span><span class="number">58.749</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>!MESSAGE&nbsp;Cannot&nbsp;access&nbsp;HTTP&nbsp;invoker&nbsp;remote&nbsp;service&nbsp;at&nbsp;[http:<span class="comment">//localhost:8080/orderserver/service/persistenceServiceHttpInvoker];&nbsp;nested&nbsp;exception&nbsp;is&nbsp;org.hibernate.HibernateException:&nbsp;CGLIB&nbsp;Enhancement&nbsp;failed:&nbsp;com.longthsoft.order.models.FittingCategory</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>!STACK&nbsp;<span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>org.springframework.remoting.RemoteAccessException:&nbsp;Cannot&nbsp;access&nbsp;HTTP&nbsp;invoker&nbsp;remote&nbsp;service&nbsp;at&nbsp;[http:<span class="comment">//localhost:8080/orderserver/service/persistenceServiceHttpInvoker];&nbsp;nested&nbsp;exception&nbsp;is&nbsp;org.hibernate.HibernateException:&nbsp;CGLIB&nbsp;Enhancement&nbsp;failed:&nbsp;com.longthsoft.order.models.FittingCategory</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Caused&nbsp;by:&nbsp;org.hibernate.HibernateException:&nbsp;CGLIB&nbsp;Enhancement&nbsp;failed:&nbsp;com.longthsoft.order.models.FittingCategory&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:<span class="number">75</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.hibernate.proxy.pojo.cglib.SerializableProxy.readResolve(SerializableProxy.java:<span class="number">55</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectStreamClass.invokeReadResolve(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readOrdinaryObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject0(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.defaultReadFields(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readSerialData(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readOrdinaryObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject0(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.util.ArrayList.readObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectStreamClass.invokeReadObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readSerialData(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readOrdinaryObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject0(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.defaultReadFields(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readSerialData(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readOrdinaryObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject0(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.io.ObjectInputStream.readObject(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.doReadRemoteInvocationResult(AbstractHttpInvokerRequestExecutor.java:<span class="number">291</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.readRemoteInvocationResult(AbstractHttpInvokerRequestExecutor.java:<span class="number">240</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor.doExecuteRequest(SimpleHttpInvokerRequestExecutor.java:<span class="number">65</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.AbstractHttpInvokerRequestExecutor.executeRequest(AbstractHttpInvokerRequestExecutor.java:<span class="number">134</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.executeRequest(HttpInvokerClientInterceptor.java:<span class="number">162</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.remoting.httpinvoker.HttpInvokerClientInterceptor.invoke(HttpInvokerClientInterceptor.java:<span class="number">139</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:<span class="number">176</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:<span class="number">210</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;$Proxy0.find(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.longthsoft.rcppart.enterprise.core.AbstractEntityManager.find(AbstractEntityManager.java:<span class="number">27</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.longthsoft.order.core.FittingManager.getByCategory(FittingManager.java:<span class="number">26</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.longthsoft.order.ui.resource.fitting.FittingListView$MyContentProvider.getChildren(FittingListView.java:<span class="number">211</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:<span class="number">1166</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:<span class="number">768</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer.getFilteredChildren(AbstractTreeViewer.java:<span class="number">574</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:<span class="number">543</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer$<span class="number">1</span><span>.run(AbstractTreeViewer.java:</span><span class="number">728</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:<span class="number">67</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:<span class="number">705</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:<span class="number">892</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer.handleTreeExpand(AbstractTreeViewer.java:<span class="number">1251</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.jface.viewers.AbstractTreeViewer$<span class="number">4</span><span>.treeExpanded(AbstractTreeViewer.java:</span><span class="number">1263</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:<span class="number">181</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:<span class="number">66</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:<span class="number">928</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:<span class="number">952</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:<span class="number">937</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Tree.wmNotifyChild(Tree.java:<span class="number">6315</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Control.WM_NOTIFY(Control.java:<span class="number">3794</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Composite.WM_NOTIFY(Composite.java:<span class="number">1166</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Control.windowProc(Control.java:<span class="number">3298</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Display.windowProc(Display.java:<span class="number">4025</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.internal.win32.OS.CallWindowProcW(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.internal.win32.OS.CallWindowProc(OS.java:<span class="number">1844</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Tree.callWindowProc(Tree.java:<span class="number">1321</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Tree.WM_LBUTTONDOWN(Tree.java:<span class="number">5206</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Control.windowProc(Control.java:<span class="number">3279</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Tree.windowProc(Tree.java:<span class="number">4785</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Display.windowProc(Display.java:<span class="number">4025</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:<span class="number">1925</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:<span class="number">2966</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:<span class="number">1914</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.ui.internal.Workbench.runUI(Workbench.java:<span class="number">1878</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:<span class="number">419</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:<span class="number">149</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;com.longthsoft.rcppart.workbench.Application.run(Application.java:<span class="number">24</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.internal.runtime.PlatformActivator$<span class="number">1</span><span>.run(PlatformActivator.java:</span><span class="number">78</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:<span class="number">92</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:<span class="number">68</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:<span class="number">400</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:<span class="number">177</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.launcher.Main.invokeFramework(Main.java:<span class="number">336</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.launcher.Main.basicRun(Main.java:<span class="number">280</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.launcher.Main.run(Main.java:<span class="number">977</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.eclipse.core.launcher.Main.main(Main.java:<span class="number">952</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>Caused&nbsp;by:&nbsp;net.sf.cglib.core.CodeGenerationException:&nbsp;java.lang.reflect.InvocationTargetException--&gt;<span class="keyword">null</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:<span class="number">237</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:<span class="number">377</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;net.sf.cglib.proxy.Enhancer.createClass(Enhancer.java:<span class="number">317</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:<span class="number">121</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxy(CGLIBLazyInitializer.java:<span class="number">66</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<span class="number">87</span><span>&nbsp;more&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Caused&nbsp;by:&nbsp;java.lang.reflect.InvocationTargetException&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.reflect.Method.invoke(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:<span class="number">384</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:<span class="number">219</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<span class="number">91</span><span>&nbsp;more&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>Caused&nbsp;by:&nbsp;java.lang.NoClassDefFoundError:&nbsp;org/hibernate/proxy/HibernateProxy&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.defineClass1(Native&nbsp;Method)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.ClassLoader.defineClass(Unknown&nbsp;Source)&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<span class="number">97</span><span>&nbsp;more&nbsp; <br />
    </span></span></li>
</ol>
<br />
使用: Eclipse-RegisterBuddy 解决</div>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/73068#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 21 Apr 2007 19:45:24 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/73068</link>
        <guid>http://bencode.javaeye.com/blog/73068</guid>
      </item>
      <item>
        <title>让ToolBarManager中的项不仅仅显示图标</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/63050" style="color:red;">http://bencode.javaeye.com/blog/63050</a>&nbsp;
          发表时间: 2007年03月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一般来说，把 IContributionItem 或 IAction 加入 ToolBarManager中，只会显示相应的图标。<br />
但如果想即显示 图标，又显示文字（就像 Perspective Shortcut）。怎么办？<br />
<br />
看了源码，知道 Perspective Shortcut 的是处理 ToolItem， 调用 ToolItem.setText(...)。<br />
<br />
所以，只要我能拿到 ToolBarManager 中的 ToolBar 中 ToolItem <br />
<br />
但是： 在 ApplicationActionBarAdvisor 或者 ViewPart 中， 当你添加 action 时， 是得不到 ToolItem 的（还没初始化）<br />
<br />
像这样：<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ApplicationActionBarAdvisor&nbsp;</span><span class="keyword">extends</span><span>&nbsp;ActionBarAdvisor&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;fillCoolBar(ICoolBarManager&nbsp;coolBar)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolBarManager&nbsp;menu&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ToolBarManager(SWT.FLAT&nbsp;|&nbsp;SWT.RIGHT);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coolBar.add(menu);&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<span class="comment">//&nbsp;添加一些action&nbsp;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...&nbsp;<span class="comment">//&nbsp;但是如何让文字也显示在图标的右边呢？这里Toolbar&nbsp;没有初始化，但我又不想让代码侵入其他部分.</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>...&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
于是，我写了以下帮助类，它是一个 <span><span>ContributionItem</span></span><br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;ShowTextToolBarContributionItem&nbsp;</span><span class="keyword">extends</span><span>&nbsp;ContributionItem&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="annotation">@Override</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">public</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;fill(ToolBar&nbsp;parent,&nbsp;</span><span class="keyword">int</span><span>&nbsp;index)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ToolItem[]&nbsp;toolItems&nbsp;=&nbsp;parent.getItems();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">for</span><span>&nbsp;(ToolItem&nbsp;toolItem&nbsp;:&nbsp;toolItems)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ActionContributionItem&nbsp;contributionItem&nbsp;=&nbsp;(ActionContributionItem)&nbsp;toolItem.getData();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IAction&nbsp;action&nbsp;=&nbsp;contributionItem.getAction();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>&nbsp;(toolItem.getText()&nbsp;==&nbsp;</span><span class="keyword">null</span><span>&nbsp;||&nbsp;toolItem.getText().length()&nbsp;==&nbsp;</span><span class="number">0</span><span>)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;toolItem.setText(action.getText());&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
嘿，&quot;这个时刻&quot;，总该让我得到 ToolItem 了吧！ 见上面的 fill<br />
<br />
然后， 我的 fillToolBar 大概像这样了:<br />
<br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span class="keyword">protected</span><span>&nbsp;</span><span class="keyword">void</span><span>&nbsp;fillCoolBar(ICoolBarManager&nbsp;coolBar)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;ToolBarManager&nbsp;menu&nbsp;=&nbsp;<span class="keyword">new</span><span>&nbsp;ToolBarManager(SWT.FLAT&nbsp;|&nbsp;SWT.RIGHT);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;coolBar.add(menu);&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>u.add(<span class="keyword">new</span><span>&nbsp;ShowTextToolBarContributionItem());&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;here</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
...
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/63050#comments" style="color:red;">已有 <strong>1</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 20 Mar 2007 19:34:55 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/63050</link>
        <guid>http://bencode.javaeye.com/blog/63050</guid>
      </item>
      <item>
        <title>mysql数据库字段 describe 出错？</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/60542" style="color:red;">http://bencode.javaeye.com/blog/60542</a>&nbsp;
          发表时间: 2007年03月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在我的 hbm 文件中:<br />
&nbsp;&nbsp;&nbsp; &lt;property name=&quot;describe&quot; /&gt;<br />
<br />
运行出错，说是 sql 语法错<br />
<br />
改成:<br />
&nbsp; &nbsp; &lt;property name=&quot;describe&quot; column=&quot;description&quot; /&gt;
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/60542#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 17 Mar 2007 11:34:16 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/60542</link>
        <guid>http://bencode.javaeye.com/blog/60542</guid>
      </item>
      <item>
        <title>Creating a declarative security model for RCP applications</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/59863" style="color:red;">http://bencode.javaeye.com/blog/59863</a>&nbsp;
          发表时间: 2007年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://www-128.ibm.com/developerworks/library/os-ecl-rcpsec/index.html">www-128.ibm.com/developerworks/library/os-ecl-rcpsec/index.html</a>
          <br/><br/>
          <span style="color:red;">
            <a href="http://bencode.javaeye.com/blog/59863#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 14 Mar 2007 20:30:25 +0800</pubDate>
        <link>http://bencode.javaeye.com/blog/59863</link>
        <guid>http://bencode.javaeye.com/blog/59863</guid>
      </item>
      <item>
        <title>从 prototype.js 深入学习 javascript 的面向对象特性</title>
        <author>bencode</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bencode.javaeye.com">bencode</a>&nbsp;
          链接：<a href="http://bencode.javaeye.com/blog/57760" style="color:red;">http://bencode.javaeye.com/blog/57760</a>&nbsp;
          发表时间: 2007年03月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><font face="Arial">从 prototype.js 深入学习 javascript 的面向对象特性</font></p>
<p><font face="Arial">js是一门很强大的语言，灵活，方便。 目前我接触到的语言当中，从语法角度上讲，只有 Ruby 比它更爽。</font></p>
<p><font face="Arial">不过我接触的动态语言只有： js ruby python flash的as 简单的几门， 应该算是井底之蛙之见。</font></p>
<p><font face="Arial">js 语法成分简单，没有 ruby 语言复杂。所以有时候我觉得她更干净（Ruby Fans 不要攻击我哦，我也是很爱很爱很爱Ruby的）！</font></p>
<p><font face="Arial">prototype.js 无疑是 js的漂亮之作，从它身上应该可以学到一些东西。</font></p>
<p><font face="Arial">如果你用 js 在页面仅仅能写出 if, alert等简单的验证代码，或者想多了解一下Js, 那么此文可能对你有帮助。</font></p>
<p><font face="Arial">好了，开始吧。</font></p>
<p><font face="Arial">现在我突然想起了 Thinking in java&nbsp;中的 &quot;一切皆是对像&quot;， 其实我觉得这句话 有点不适合 java 反倒是更适合 js</font></p>
<font face="Arial">
<p><br />
1.怎样构造(初始化)对象?</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;Version:&nbsp;'1.5.0_rc1', &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;ScriptFragment:&nbsp;'(?:)((\n|\r|.)*?)(?:&lt;\/script&gt;)', &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;emptyFunction:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{}, &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;K:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(x)&nbsp;{</span><span class="keyword" twffan="done">return</span><span twffan="done">&nbsp;x} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>就这样，初始化了一个对象(名字就叫 Prototype)，以及对象的四个成员: Version, ScriptFragment, emptyFunction, K</p>
<p>我们也来试试:</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;bbs&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;name:&nbsp;'JavaEye', &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;version:&nbsp;'2.0', &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;describe:&nbsp;</span><span class="string" twffan="done">&quot;做最棒的软件开发交流区&quot;</span><span twffan="done">, &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{&nbsp;alert(</span><span class="string" twffan="done">&quot;hello,&nbsp;i'm&nbsp;javaeye!&nbsp;&quot;</span><span twffan="done">)&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>于是你可以这样使用： bbs.name 或 bbs.sayHello()</p>
<p>看到吗？ sayHello 是一个方法哦，不要惊慌，&quot;一切都是对象&quot;，所以它和 name 是一样的，只不过初始化，或定义的语法不一样。想起 js 中的正则表达式中的那两个杆杆了吗？ 可爱吧！</p>
<p>方法是对象，所以它可以被当作参数传递，或者作为方法的返回值。</p>
<p>所以 Prototype 中有一个 Version 属性，还有一个匹配 script 的正则式字符串， 一个空方法emptyFunction，还有一个方法 K, 它仅仅返回参数。</p>
<p>没问题吧，继续！</p>
<p>2. 构造函数？</p>
<p>先让我们写段代码吧(中学时，我语文极差(大学没语文了)，我想写代码让你们明白我心里真实的想法)：</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Person&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(name)&nbsp;{&nbsp;</span><span class="comment" twffan="done">//&nbsp;这里&nbsp;Person&nbsp;是一个方法 </span><span twffan="done">&nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name&nbsp;=&nbsp;name; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;bencode&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;Persion(</span><span class="string" twffan="done">&quot;bencode&quot;</span><span twffan="done">);&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;这里像Java吧！ </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">alert(bencode.name);&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>先看结果：<br />
从 alert(bencode.name); 可以知道，bencode是对象， 而 name 就是 bencode 的属性， 它被正确地初始化为 &quot;bencode&quot;</p>
<p>所以 var bencode = new Persion(&quot;bencode&quot;); 就是构造了一个新的对象，Person() 相当于构造函数</p>
<p>所以 new 这个关键字， 就是构造一个新的对象，并且在这个对象上调用相应的方法，并将这个对象返回。</p>
<p>按上面说： 方法 如果用在 在 new 后面，就相当于成了构造函数了。</p>
<p>话又说回来了， 如果 var bencode = new Persion(&quot;bencode&quot;) 是 构造了一个对象，像Java, 那么 Person 是不是类呢？<br />
可是 Person 不是方法吗？ 可是方法不也是对象吗？ 类也是对象？ </p>
<p>一切皆对象? </p>
<p>本来无一物！</p>
<p>好了，看 prototype.js吧</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Class&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;create:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword" twffan="done">return</span><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.initialize.apply(</span><span class="keyword" twffan="done">this</span><span twffan="done">,&nbsp;arguments); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>初始化一个 Class 对象， 它有一个成员，是一个方法， 这个方法返因另一个方法（方法是对象，所以可以作为参数或者返回值）</p>
<p>所以如果我们这么做： <br />
</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;A&nbsp;=&nbsp;Class.create();&nbsp;</span><span class="comment" twffan="done">//&nbsp;此时&nbsp;A&nbsp;是一个方法，方法体，下面解释 </span><span twffan="done">&nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;a&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;A(...);&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;对方法使用&nbsp;new&nbsp;操作符，就是构造一个新的对象，然后在这个对象上调用这个方法(&nbsp;现在是&nbsp;A)</span><span twffan="done">&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>上面分析说？ A相当于类， 哈哈 Class.create();&nbsp;&nbsp;// 终于名副其实<br />
var a = new A(...);&nbsp;&nbsp;// 也是相当地直观， 就是构造一个新的对象，类型 是A</p>
<p>new 操作符构造了对象，并调用了 方法， 这个方法到底做了什么呢？ 也就是上面没有分析的东东，看看先：</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Class&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;create:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword" twffan="done">return</span><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;见[1] </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.initialize.apply(</span><span class="keyword" twffan="done">this</span><span twffan="done">,&nbsp;arguments);&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;见[2] </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>[1]. new 操作符，就会在新产生的对象上调用这个方法<br />
[2]. 哦？ 这里就是调用 this 对象上的 initialize方法， 并传递 arguments<br />
&nbsp; 换句话说，就是把构造的任务委托给 initialize 方法<br />
&nbsp; initialize? 哪里来？ 见下面，类的扩展(继承)<br />
&nbsp; <br />
3. prototype?</p>
<p>看段老代码：<br />
</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Person&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(name)&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name&nbsp;=&nbsp;name; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;bencode&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;Person(</span><span class="string" twffan="done">&quot;bencode&quot;</span><span twffan="done">);&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>bencode不是一个自闭的人，他应该可以向javaeye介绍一下自己。<br />
像这样：<br />
</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span twffan="done">bencode.sayHello();&nbsp;&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<p><br />
&nbsp;<br />
假如不能实现以上功能的话， 上面的 new，上面所有的东东都等于垃圾。</p>
<p>所以。需要给 Person 类加&quot;实例方法&quot;</p>
<p>题外话： 静态方法如何添加？ 看上面的 Class.create, 仅仅是一个对象的成员而已</p>
<p>好， 再来一段 (为了完整性，上面的几句话，再抄一次)</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Person&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(name)&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name&nbsp;=&nbsp;name; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">Person.prototype&nbsp;=&nbsp;{&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;protype&nbsp;是啥? </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;hi,&nbsp;javaeye,&nbsp;I'm&nbsp;&quot;</span><span twffan="done">&nbsp;+&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name); &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;bencode&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;Person(</span><span class="string" twffan="done">&quot;bencode&quot;</span><span twffan="done">); &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">bencode.sayHello();&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>运行代码，通过！</p>
<p>prototype是啥？ 请暂时忘记 Prototype(prototype.js) 这个库，名字一样而已！</p>
<p>让我们再从结果上去分析（第一次我们用这种方法分析而得出了 new 的作用），</p>
<p>我们在思考：<br />
&nbsp;要想 bencode.sayHello() 正常运行<br />
&nbsp;bencode 是一个对象, 这是我们已经知道的<br />
&nbsp;sayHello() 应该是 bencode 这个对象的方法才可以<br />
&nbsp;<br />
&nbsp;可是bencode 这个对象是 new 操作符产生的, 而 new 此时作用于 Person 这个 &quot;类&quot;<br />
&nbsp;那么， 哦？ 那么有两种可能:<br />
&nbsp;1. new 产生的那个新对象是不是就是 Person.prototype<br />
&nbsp;2. Person.prototype 中的成员 将会被 new 操作符添加到 新产生的对象中 </p>
<p>再看:<br />
</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span twffan="done">Person.prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;hi,&nbsp;javaeye,&nbsp;I'm&nbsp;&quot;</span><span twffan="done">&nbsp;+&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name);&nbsp;</span><span class="comment" twffan="done">//&nbsp;这里有this </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>this.name, 这里的 this 指什么？所以第一个可能讲不通呀</p>
<p>回忆起这段：</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;Person&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(name)&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;</span><span class="keyword" twffan="done">this</span><span twffan="done">.name&nbsp;=&nbsp;name; &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>如果这里的 this 代表着新产生的对象的话。<br />
那么第二种情况就讲得通了， new 将会把 Person.prototype 这个对象的成员放到 这个新对象中。 与当前行为相符。</p>
<p>所以： Person 的 prototype 对象中的 成员, 将会被添加到 新产生的对象 中(我是这样理解的)<br />
(不知道 Js解释器是不是开源的， 有空我得去看看，怎么实现的。)</p>
<p>嘿，默认的 prototype 就是 Object 哦！</p>
<p>4. 扩展？继承？</p>
<p>什么是扩展？啥是继承？ ! 我从爸爸那得到了什么？<br />
想不通！</p>
<p>还是实际点：</p>
<p>有一个类A, 它有一个 sayHello方法</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;A&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">A.prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;sayHello&nbsp;A&quot;</span><span twffan="done">) &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>我想构造一个 B 类，让他继承 A 对象， 这句话太抽象。 </p>
<p>其实我们可能想这样：</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;b&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;B(); &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">b.sayHello();&nbsp;&nbsp;</span><span class="comment" twffan="done">//&nbsp;调用&nbsp;A&nbsp;的&nbsp;sayHello</span><span twffan="done">&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这应该是继承的第一层含义（重用）</p>
<p>怎么办到呢？</p>
<p>var B = function() {&nbsp;// 这里是有一个B类了<br />
}</p>
<p>怎么样添加&quot;实例方法&quot;?&nbsp; 快点想起 prototype!!!</p>
<p>B.prototype = A.prototype</p>
<p>这样行了吗？ 恭喜, 运行通过！</p>
<p>让我们整合一次</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;A&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">A.prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;sayHello&nbsp;A&quot;</span><span twffan="done">); &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;B&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">B.prototype&nbsp;=&nbsp;A.prototype; &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;b&nbsp;=&nbsp;</span><span class="keyword" twffan="done">new</span><span twffan="done">&nbsp;B(); &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">b.sayHello();&nbsp; &nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>可是如果 B 是这样呢?</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;B&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">B.prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;sayHi:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;sayHi&nbsp;B&quot;</span><span twffan="done">); &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>我们是不是应该将 A.prototype 中的内容添加到 B.prototype 对象中，而不是代替它呢？ 当然。</p>
<p>这样才能&quot;扩展&quot;</p>
<p>题外话？多态在哪里？ 嘿嘿</p>
<p>好了，足够多了， 那prototype.js 是怎么样&quot;扩展&quot;的呢？</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span twffan="done">Object.extend&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">(destination,&nbsp;source)&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;</span><span class="keyword" twffan="done">for</span><span twffan="done">&nbsp;(</span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;property&nbsp;</span><span class="keyword" twffan="done">in</span><span twffan="done">&nbsp;source)&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;&nbsp;&nbsp;destination[property]&nbsp;=&nbsp;source[property]; &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;</span><span class="keyword" twffan="done">return</span><span twffan="done">&nbsp;destination; &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<p>这个只是简单地把 source 的成员， 添加到 destination 对象中嘛, 哪里看得出扩展？</p>
<p>如果我这样呢？</p>
<div class="code_title" twffan="done">js 代码</div>
<div class="dp-highlighter" twffan="done">
<div class="bar" twffan="done">&nbsp;</div>
<ol class="dp-c">
    <li class="alt"><span twffan="done"><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;A&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span></span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">A.prototype&nbsp;=&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;sayHello:&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;&nbsp;alert(</span><span class="string" twffan="done">&quot;sayHello&nbsp;A&quot;</span><span twffan="done">) &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done"></span><span class="keyword" twffan="done">var</span><span twffan="done">&nbsp;B&nbsp;=&nbsp;</span><span class="keyword" twffan="done">function</span><span twffan="done">()&nbsp;{ &nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">} &nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">Object.extend(B.prototype,&nbsp;A.prototype);&nbsp;</span><span class="comment" twffan="done">//&nbsp;先添加父类(A)成员 </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class=""><span twffan="done">Object.extend(B.prototype,&nbsp;{&nbsp;</span><span class="comment" twffan="done">//&nbsp;再添加B类成员,&nbsp;如果是同名，则覆盖，行为符合&nbsp;&quot;多态&quot; </span><span twffan="done">&nbsp;&nbsp;</span> </li>
    <li class="alt"><span twffan="done">&nbsp;sayHi:&nbsp;