<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Enjoy Coding, Enjoy Life！</title>
    <description>Enjoy Coding, Enjoy Life！</description>
    <link>http://puras.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>Flex 3 cookbook-技巧1.6 在MXML中添加事件监听器</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/207027" style="color:red;">http://puras.javaeye.com/blog/207027</a>&nbsp;
          发表时间: 2008年06月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.6.1 问题</strong>
<br />
你需要在MXML文件中添加将监听MXML文件中分派给子节点的一些事件的事件监听器.<br />
<br />
<strong>1.6.2 
解决办法</strong>
<br />
通过给组件的事件标签提供一个方法名,可以选择是否使用事件对象.<br />
<br />
<strong>1.6.3 
讨论</strong>
<br />
每当一个动作发生,Flex组件都会触发一个事件,例如用户单击一个按钮,改变组合框中被选择的项,或是加载数据.要监听这些事件广播,只需添加一个将处理这个事件的方法的引用.例如:</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Canvas xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[

            private function buttonClick():void
            {
                trace(&quot; Button has been clicked &quot;);
            }

        ]]&gt;
    &lt;/mx:Script&gt;

    &lt;mx:Button click=&quot;buttonClick()&quot; label=&quot;Click Me&quot;/&gt;
&lt;/mx:Canvas&gt;
</pre>
&nbsp;
<p>&nbsp;</p>
<p>添加的click=&quot;buttonClick()&quot;只要按钮发生单击事件,就会调用buttonClick方法.</p>
<p>你也可以将事件对象本身传递给方法.每当组件触发一个事件,这个组件都会发送一个Event类型的对象,所有事件监听对象都可以接受.例如:</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:HBox xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;

    &lt;mx:Script&gt;
        &lt;![CDATA[

            private function buttonClick(event:Event):void
            {
                trace(event.target.id);
                if(event.target.id == &quot;buttonOne&quot;)
                {
                    trace(&quot; button one was clicked&quot;)
}
                else
                {
                    trace(&quot; button two was clicked&quot;)
}
            }

        ]]&gt;
    &lt;/mx:Script&gt;

    &lt;mx:Button click=&quot;buttonClick(event)&quot;
label=&quot;Click Me One&quot; id=&quot;buttonOne&quot;/&gt;
    &lt;mx:Button click=&quot;buttonClick(event)&quot; label=&quot;Click Me Two&quot; id=&quot;buttonTwo&quot;/&gt;
&lt;/mx:HBox&gt;
</pre>
&nbsp;
<p>&nbsp;</p>
<p>通过告诉事件监听器去监听一个类型事件的对象,你可以将事件发送给事件监听器,之后根据指定的标准用不同的方式返回给事件一个响应.在这个例子中,响应则依赖于事件在哪里引发.</p>
<p>在Flex中事件对象和事件分派系统是需要重点来理解的.当事件被监听时,所有的事件都包含一个使用的类型;如果是单击类型的事件,之后事件监听方法将被添加到子元素的单击事件中:</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Button click=&quot;trace('I was clicked')&quot; /&gt;</pre>
<p>&nbsp;</p>
<p>用户交互的通知,从服务器发送给应用的消息,或是通过事件发送定时器.事件对象定义了几个你可以在所有监听方法中访问的属性.如下所是:</p>
<p><em>bubbles</em>
<br />
标识出一个事件是否是冒泡事件,更准确的说,它是否将从接收到事件的对象再次向上面的事件链传递.</p>
<p>&nbsp;</p>
<p><em>cancelable</em>
<br />
标识出事件触发的行为是否可以被阻止.</p>
<p>&nbsp;</p>
<p><em>currentTarget</em>
<br />
使用事件监听器有效的处理事件对象的对象.</p>
<p>&nbsp;</p>
<p><em>eventPhase</em>
<br />
事件流的当前阶段.</p>
<p>&nbsp;</p>
<p><em>Target</em>
<br />
事件目标,触发事件的那个对象.</p>
<p>&nbsp;</p>
<p><em>Type</em>
<br />
事件的类型.</p>
<p>&nbsp;</p>
<p>你也可以在MXML中书写事件处理器,通过使用绑定标签{}指示出当事件被触发时需要执行花括号中的代码.例如:</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Button click=&quot;{textComponent.text = 'You clicked the button'}&quot; label=&quot;Click Me&quot; /&gt;
&lt;mx:Text id=&quot;textComponent&quot; /&gt;</pre>
<p>&nbsp;</p>
<p>在它编译代码的时候,Flex编译器将创建一个方法,之后将textComponent.text = 'You clicked the 
button'做为方法的主体.它可能看起来不同于前面的方法,但是这个方法的结果确是相同的:它监听这个事件,并执行它的代码.这种方法没有什么本质上的错误,但是相比设置一个属性来说还是相当复杂的,使用一个已定义的方法让你的代码更加容易阅读和理解.</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/207027#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 23 Jun 2008 10:48:51 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/207027</link>
        <guid>http://puras.javaeye.com/blog/207027</guid>
      </item>
      <item>
        <title>Flex 3 cookbook-技巧1.5 在Flex Builder之外编译Flex项目</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/206113" style="color:red;">http://puras.javaeye.com/blog/206113</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.5.1 问题</strong>
<br />
没有为你的Flex项目使用Flex Builder,还需要编译你的项目.</p>
<p><br />
<strong>1.5.2 解决办法</strong>
<br />
使用终端或是命令提示符来调用编译器.</p>
<p><br />
<strong>1.5.3 讨论</strong>
<br />
虽然Flex Builder是一个非常强大的Flex开发工具,当然,它不是创建Flex应用所必需的.MXML编译器(mxmlc)对任何人都是免费的,并且可以从Adobe下载到.要在Flex Builder之外编译Flex应用,打开命令提示符(Windows)或是终端(Mac OS X),调用MXML编译器,传递包含文件的应用做为参数,使用例如下面的命令:</p>
<p>&nbsp;</p>
<pre name="code" class="java">home:base$ . /Users/base/Flex SDK 3/bin/mxmlc ~/Documents/FlexTest/FlexTest.mxml</pre>
<p>&nbsp;</p>
<p>(注,上面是在MAC下的方式,在Windows下将Flex SDK的Bin目录加到环境变量Path中,直接执行mxmlc 路径/文件名 即可)</p>
<p>&nbsp;</p>
<p>将把MXML文件编译到SWF中,通过默认的编译方式将它编译到MXML文件所在位置的文件夹.编译器的一些警告或错误将显示在终端或命令提示符窗口.要为MXML编译器增加更多的选项,你可以附加参数给编译器调用.例如:</p>
<pre name="code" class="java">home:base$ ./mxmlc ~/Documents/FlexTest/FlexTest.mxml  -output=/Users/base/test/genera
ted/Index.swf -library-path+=/Users/lib/MyLib.swc</pre>
<p>&nbsp;</p>
<p>生成一个名为Index.swf的SWF文件,它位置是目录/Users/base/test/generated/,并且包含了SWC库文件/Users/lib/MyLib.swc.</p>
<p>&nbsp;</p>
<p>要想在命令提示符下直接调用MXML编译器,而不提供你的SDK完整的安装路径(在这个例子中是c:\flex_sdk_3),你需要将编译器的路径/bin添加到系统变量Path中.</p>
<p>&nbsp;</p>
<p>在Windows下:<br />
1.从控制面板打开系统.<br />
2.选择高级面板.<br />
3.单击环境变量.<br />
4.在系统变量的表中,找到并双击Path.<br />
5.在变量值框内,如果最后一个字符没有设置分号(;),输入一个分号,之后输入你的Flex SDK安装目录下的/bin文件夹.<br />
6.MXML编译器路径设置之后,打开命令提示符窗口,进入你项目的目录,之后输入下面的命令:</p>
<p><br />
C:\Documents\FlexTest&gt; mxmlc FlexTest.mxml</p>
<p><br />
将在C:\Documents\FlexTest目录中生成FlexTest.swf文件,正如本章第一个命令介绍的一样.设置了Flex 3 SDK的/bin目录的路径之后,可以让你在任何的目录中调用编译器,在这个例子中,是你的项目的当前路径.</p>
<p><br />
7.如果第6步生成下面的错误信息</p>
<p><br />
Error: could not find JVM</p>
<p><br />
你必须手动的输入你机器上安装的Java运行时环境(JRE)的目录路径.要手动的输入路径,跳转到你的Flex 3 SDK安装目录下的/bin目录.使用文本编辑器打开文件jvm.config,并将你的JRE安装路径附加到变量java.home上.假设你的Java安装在你的系统的根目录,你输入下面的命令:</p>
<p><br />
java.home=C:/Java/jre</p>
<p>&nbsp;</p>
<p>在Mac OS X或Linux下:<br />
1.打开你的.bash_profile文件(如果你使用Bash),并修改路径变量,添加MXML编译器的地址.你的.bash_profile文件应该和这个看起来差不多:</p>
<p><br />
PATH=&quot;${PATH}:~/flex3SDK/bin&quot;<br />
export PATH</p>
<p><br />
.base_profile将位于你的用户主目录(你可以通过在命令行输入cd ~来访问它).如果你使用tsch,MXML编译器的路径应该添加到.profile文件中.</p>
<p><br />
2.如果Java运行时没有设置,在你的终端shell下设置下面的Path变量:</p>
<p><br />
PATH=&quot;${PATH}:~/flex3SDK/bin&quot;<br />
export PATH</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/206113#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jun 2008 10:19:15 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/206113</link>
        <guid>http://puras.javaeye.com/blog/206113</guid>
      </item>
      <item>
        <title>Flex 3 cookbook-技巧1.4 在Flex Builder中设置MXML编译器的编译选项</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/206088" style="color:red;">http://puras.javaeye.com/blog/206088</a>&nbsp;
          发表时间: 2008年06月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.4.1 问题</strong>
<br />
你需要指定MXML编译器的编译选项.</p>
<p><br />
<strong>1.4.2 解决方法</strong>
<br />
在项目属性对话框的Flex编译器面板内设置编译属性.</p>
<p><br />
<strong>1.4.3 讨论</strong>
<br />
MXML编译器,也称mxmlc,是把ActionScript和MXML文件编译成可以在Flash播放器中观看的SWF文件的应用程序.当你在Flex Builder中运行或调试一个Flex应用时,MXML编译器被调用,并且文件将作为一个参数传递给应用. 当你调试播放器时,创建调试SWF的参数将被传给MXML编译器.Flex Builder也可以让你给MXML编译器传一些其他的参数;例如,你可以通过参数指定一个外部的库路径,允许SWF访问本地文件,或设置背景颜色.</p>
<p>&nbsp;</p>
<p>要修改项目编译器的设置,右键项目,并从关联菜单中选择属性(图1-9),或从菜单栏选择Project-&gt;Properties.</p>
<p><img src="../../../upload/picture/pic/16385/3a63adaa-44b8-3091-a8a4-552176b9cbe2.png " height="499" alt="图1-9" width="259" />
</p>
<p>&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; 图1-9</p>
<p>&nbsp;</p>
<p>在项目属性对话框中(图1-10),选择Flex编译器.在这里有几个选项来控制SWF文件是如何被编译的.在标签为&quot;附加编译参数&quot;的输入框中,你可以添加多个选项;在每个选项前输入连字符(-),并使用空格做选项的分隔.</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/16387/41e24df7-43bc-3fa7-9e74-0b4a6e096290.png " height="502" alt="图1-10" width="682" />
</p>
<p>&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; 图1-10</p>
<p>&nbsp;</p>
<p>下面是一些常用的选项:</p>
<p>&nbsp;</p>
<p><em>verbose-stacktraces</em>
<br />
指定在发生一个运行时错误时,SWF是否包含行号和文件名.这个设置将使生成的SWF文件更大,并且一个使用verbose-stacktraces的SWF不同于一个调试的SWF.</p>
<p>&nbsp;</p>
<p><em>source-path path-element</em>
<br />
添加一些目录或文件到包含MXML或ActionScript的源路径上.你可以使用通配符来包含一个目录下的所有文件和子目录.同样你也可以使用+=将新的参数附加到默认选项上,或是将一些选项设置放入一个配置文件,例如:<br />
-source-path+=/Users/base/Project</p>
<p>&nbsp;</p>
<p><em>include-libraries</em>
<br />
指定一个编译的SWC文件到应用中,链接库里的所有的类和资源到SWF中.如果应用将导入其他可能在SWC中需要访问的类的模块地,这个选项是非常有用的.</p>
<p>&nbsp;</p>
<p><em>library-path</em>
<br />
与include-libraries选项相似,但是只包使用在SWF中的含类和资源.这让你易于控制SWF文件的大小.</p>
<p>&nbsp;</p>
<p><em>locale</em>
<br />
指定SWF文件使用的场所.例如,使用-locale=es_ES将指定SWF的使用场所为西班牙.</p>
<p>&nbsp;</p>
<p><em>use-network</em>
<br />
&nbsp;指出SWF是否将访问本地文件系统,是否打算供本地机器使用，是否按Flash Player安全标准来使用。例如,使用-use-network=false来指定SWF将拥有对本地文件系统的访问,但不能够访问任何网络服务.默认值是true.</p>
<p>&nbsp;</p>
<p><em>frames.frame</em>
<br />
Enables you to add asset factories that stream in after the application and then publish their interfaces with the ModuleManager class. The advantage of doing this is that the application starts faster than it would have if the assets had been included in the code, but does not require moving the assets to an external SWF file. One of the more difficult and more useful parameters.</p>
<p>&nbsp;</p>
<p><span style="color: #0000ff;">(感觉有一些东西理解的不准,等过后对技术有更深的了解后再来修改吧.)</span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/206088#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 20 Jun 2008 10:11:15 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/206088</link>
        <guid>http://puras.javaeye.com/blog/206088</guid>
      </item>
      <item>
        <title>Flex 3 cookbook-技巧1.3 创建ActionScript项目</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/203961" style="color:red;">http://puras.javaeye.com/blog/203961</a>&nbsp;
          发表时间: 2008年06月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.3.1 问题</strong>
<br />
你想创建一个不使用Flex 3库的ActionScript项目.</p>
<p><br />
<strong>1.3.2 解决方法<br />
</strong>
使用创建新项目向导,并选择ActionScript项目.</p>
<p><br />
<strong>1.3.3 讨论</strong>
<br />
ActionScript项目,与Flex项目不同,因为它根本不包含Flex框架.ActionScript项目依赖Flash基础代码中的核心ActionScript类,并且不允许访问Flex框架中的任何组件.要创建一个ActionScript项目,选择File-&gt;New-&gt;ActionScript Project(图1-8).</p>
<p>&nbsp;</p>
<p><img src="../../upload/picture/pic/16091/4658883b-5898-39a2-bf22-6ea3f538e5d8.png" height="364" alt="图1-8" width="414" />
</p>
<p>&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; 图1-8</p>
<p>&nbsp;</p>
<p>在创建向导中,指定应用名称和文件与SWF文件存储的路径.单击结束为项目使用默认配置,或是单击下一步,为项目添加库或其他资源文件夹,修改项目的主文件,添加你的代码可以访问的SWC文件,或是修改输出的SWF文件的位置.默认情况下,应用的主ActionScript文件的名称将被设置成项目的名称.默认的SWF文件输出位置将是项目中的bin-debug文件夹.</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/203961#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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>Mon, 16 Jun 2008 08:30:55 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/203961</link>
        <guid>http://puras.javaeye.com/blog/203961</guid>
      </item>
      <item>
        <title>Flex 3 Cookbook-技巧1.2 在Flex Builder中创建Flex库项目</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/203052" style="color:red;">http://puras.javaeye.com/blog/203052</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.2.1 问题</strong>
<br />
你需要创建一个Flex库项目.</p>
<p><br />
<strong>1.2.2 解决方法</strong>
<br />
从Flex Builder的导行栏,选择新建-&gt;Flex库项目打开创建新项目向导.</p>
<p><br />
<strong>1.2.3 讨论</strong>
<br />
一个Flex库项目,不需要主MXML文件,它被编译到SWF文件中.改为编译到SWC文件中,可以被用到其他的应用中,或是作为运行时共用的库资源.库里面的类可以用于创建一组在其他项目编译或运行时的可复用资产.要创建一个Flex库项目,右键Flex Builder的项目导航栏,打开关联菜单(图1-6)或使用文件菜单.使用其一,之后选择New-&gt;Flex Library Project.</p>
<p>&nbsp;</p>
<p><img src="../../upload/picture/pic/15999/b4b04a18-53e0-3661-9974-8442084b3ecb.png " height="401" alt="图1-6" width="411" />
</p>
<p>&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; 图1-6</p>
<p>&nbsp;</p>
<p>在向导对话框中(图1-7),指定你项目的名称和位置.</p>
<p><img src="../../upload/picture/pic/16001/4de247b8-4db7-38d2-a94c-5ca8a042418d.png " height="495" alt="图1-7" width="499" />
</p>
<p>&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; 图1-7</p>
<p>&nbsp;</p>
<p>如果你不添加其他内容,现在可以点击结束.如果你城要包含文件,资产或是其他的SWC文件,包含Adobe AIR库,点击下一步,并从向导对话框中选择它们.要设置可以被选择并增加进recipe的类,首先浏览你想要包含的资源路径,之后设置其他的将要被编译进库的类或是图片资源.点击结束,完成项目的创建.</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/203052#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 17:08:32 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/203052</link>
        <guid>http://puras.javaeye.com/blog/203052</guid>
      </item>
      <item>
        <title>Flex 3 Cookbook-技巧1.1 在Flex Builder中创建Flex项目</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/202785" style="color:red;">http://puras.javaeye.com/blog/202785</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><strong>1.1.1 问题</strong>
<br />
你想在Flex Builder中创建一个项目.</p>
<p><br />
<strong>1.1.2 解决方法</strong>
<br />
使用创建新项目向导.</p>
<p><br />
<strong>1.1.3 讨论</strong>
<br />
Flex Builder是构建在Eclipse之上,the venerable and well-respected integrated development environment (IDE) most strongly associated with Java development.尽管Flex Builder的确不是Flex开发所必需的,但它确是创建Flex应用的首选工具,并且它提供了许多特点可以帮助你更加有效的设计和开发应用.你可以使用独立的Flex Builder,也可以在Eclipse安装插件来使用.</p>
<p>&nbsp;</p>
<p>你需要做的第一件事,是为Flex开发者创建一个Flex项目.Flex项目与Flex Builder中的其他类型的项目不同,因为它包含theSWC(Flex库),Flex库SWC(与ActionScript项目不同),并且将编译成可以在Flash播放器中观看的SWF文件(与Flex库项目不同).创建一个项止,在Flex Builder的项目导行视图中右键打开关联菜单(如图1-1),或是使用应用顶部的文件菜单.使用其中任何一个,选择New-&gt;Flex Project.将出现一个对话框,来引导你创建项目.</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/15965/c0096e8e-7918-31be-a4b8-a2e5526a7c79.png " height="496" alt="图1-1" width="421" />
</p>
<p>&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;&nbsp; 图1-1</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>当出现指定项目将怎么获取数据的时候,选择基本,显示出新的Flex项目的对话框(图1-2).</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/15967/ef7b7f96-20e9-3c51-995b-9dcfbf17edbc.png " height="562" alt="图1-2" width="625" />
</p>
<p>&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;&nbsp; 图1-2</p>
<p>&nbsp;</p>
<p>在下面输入应用名称,一个应用将存在你系统上的地址.在Windows机器上的默认地址是C:/Documents and Settings/Username/Documents/workspace/Projectname,Mac机器上是Users/Username/Documents/workspace/Projectname.当然你可以取消对&quot;使用默认地址&quot;的选择,并将你的文件存储到你想存储的地方.项目的名称必须是唯一的.在应用类型区域,选择将创建一个AIR应用还是一个将通过Flash播放器插件运行在浏览器中的应用.最后,服务器技术设置你需要选择一个应用将连接的服务器,如果那样,什么服务类型和单独的配置类型将是必需的.</p>
<p>&nbsp;</p>
<p>如果你没有什么其他想要添加的,单击结束.要改变编译后的SWF文件的位置,点击下一步,跳转到如图1-3显示的对话框.</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/15969/cdea1498-5fac-3c7c-99e9-f865cf29bf45.png " height="185" alt="图1-3" width="621" />
</p>
<p>&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;&nbsp; 图1-3</p>
<p>&nbsp;</p>
<p>在设置了生成SWF文件的位置之后,你可以选择结束或是向项目中添加源代码文件或是SWC文件.增加另外的文件夹或是设置文件夹,单击资源路径面板(图1-4).为项目增加SWC文件,单击类路径面板(图1-5).在这里,你还可以更改主要的MXML应用文件,它默认的是与项目的名称相同.</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/15971/78b2eaa3-054e-3042-b0b2-9177e81537a8.png " height="656" alt="图1-4" width="609" />
</p>
<p>&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;&nbsp; 图1-4</p>
<p>&nbsp;</p>
<p><img src="../../../upload/picture/pic/15973/c5323ec6-a99c-3e30-bc57-4d2cd67af45e.png " height="655" alt="图1-5" width="615" />
</p>
<p>&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;&nbsp; 图1-5</p>
<p>&nbsp;</p>
<p>指定完所有的路径和名称之后,单击结束.你的项目现在已经配置好,可以准备开发了.</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/202785#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 09:00:40 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/202785</link>
        <guid>http://puras.javaeye.com/blog/202785</guid>
      </item>
      <item>
        <title>Flex 3 Cookbook-1.Flex和ActionScript基础</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/202783" style="color:red;">http://puras.javaeye.com/blog/202783</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一个Flex应用主要由两种不同的语言组成:ActionScript和MXML.现在,在Flex3.0中,ActionScript已经从一个基于原型的脚本语言发展为一个完全的面向对象,类型严格的ECMAScript语言.对于MXML,无论你是有HTML和XML工作经验的人还是标记语言的新手,它都是易于掌握的标记语言.</p>
<p>&nbsp;</p>
<p>如何让MXML和ActionScript相互联系呢?编译器把它们从不同的语言解析之后,将它们转换成相同的对象,因此:</p>
<p>&nbsp;</p>
<pre name="code" class="xml">&lt;mx:Button id="btn" label="My Button" height="100" /&gt;</pre>
<p>&nbsp;<br />和</p>
<p>&nbsp;</p>
<pre name="code" class="js">var btn:Button = new Button();
btn.lanel = "My Button";
btn.height = 100;</pre>
<p>&nbsp;</p>
<p><br />将生成相同的对象.主要的区别在于,用ActionScript(第二个例子)中,除了创建了一个按钮,别无其他,而在MXML创建的对象,增加了按钮并包含了所有组件都有的MXML代码.Flex框架调用用MXML描述的对象的构造器,并将其添加到它的父节点或是将其设置成父节点的一个属性.</p>
<p>&nbsp;</p>
<p>MXML文件可以通过&lt;mx:Script&gt;标签包含ActionScript,但是ActionScript不能包含MXML.尽管把MXML作为对外观和你的应用的组件的描述,将ActionScript作为事件处理和自定义你的应用所需的逻辑的描述的想法是诱人的,但这不总是真实的.一个将它们联系起来更好的办法是理解两种语言根本上只是通过不同的语法来描述相同的对象.Flash平台的某些部分,不能访问没有使用ActionScript中的循环,方法定义,和条件表达式等.这就是为什么使用ActionScript和综合使用MXML和ActionScript是必需的,除了那些简单的应用.</p>
<p>&nbsp;</p>
<p>这一章讨论MXML和ActionScript结合的许多方面:在MXML中创建组件,在ActionScript中创建类,添加事件监听器,使用ActionScript和MXML创建code-behind文件,创建对方法的描述.虽然它没有包含所有的答案,但它将带你开始创建基础的ActionScript和MXML.</p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/202783#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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>Fri, 13 Jun 2008 08:55:52 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/202783</link>
        <guid>http://puras.javaeye.com/blog/202783</guid>
      </item>
      <item>
        <title>翻译Flex 3 Cookbook</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/202782" style="color:red;">http://puras.javaeye.com/blog/202782</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>
<p>虽然自己的英语水平很差,不过为了能逐步的提高.</p>
<p>&nbsp;</p>
<p>自己给自己一些任务.</p>
<p>&nbsp;</p>
<p>选择一个有兴趣的技术,找一份英文文档来学习.</p>
<p>&nbsp;</p>
<p>在学习的过程中顺便将它翻译过来.</p>
</p>
<p>&nbsp;</p>
<p>希望能在学习技术的过程中,也能提高英语水平.</p>
<p>&nbsp;</p>
<p>进步是一点点的,只要能坚持,我相信不论是技术还是英语,都会有一个质的飞跃的.</p>
<p>&nbsp;</p>
<p><img src="../../images/smiles/icon_biggrin.gif" alt="" /></p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/202782#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 08:55:05 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/202782</link>
        <guid>http://puras.javaeye.com/blog/202782</guid>
      </item>
      <item>
        <title>Adobe AIR入门</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/198146" style="color:red;">http://puras.javaeye.com/blog/198146</a>&nbsp;
          发表时间: 2008年05月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-family: verdana; font-size: 10px;">
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;">按照下面的步骤来创建你第一个Adobe AIR应用:</span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;"><br /></span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;">1.下载</span><a href="http://www.adobe.com/go/getair" style="color: #467aa7; font-weight: bold; text-decoration: none; padding: 0px; margin: 0px;"><span style="font-size: medium;">Adobe AIR</span></a><span style="font-size: medium;">的运行时.<br /></span></p>
<p style="padding: 0px; margin: 0px;"><span style="white-space: pre;"><span style="font-size: medium;">	</span></span><span style="font-size: medium;">你需要使用运行时来加载AIR应用.</span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;"><br /></span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;">2.下载并安装</span><a href="http://www.adobe.com/go/downloadflex3" style="color: #467aa7; font-weight: bold; text-decoration: none; padding: 0px; margin: 0px;"><span style="font-size: medium;">Adobe Flex Builder3</span></a><span style="font-size: medium;">或是</span><a href="http://www.adobe.com/go/flex3_sdk" style="color: #467aa7; font-weight: bold; text-decoration: none; padding: 0px; margin: 0px;"><span style="font-size: medium;">Flex 3 SDK</span></a><span style="font-size: medium;"><br /></span></p>
<p style="padding: 0px; margin: 0px;"><span style="white-space: pre;"><span style="font-size: medium;">	</span></span><span style="font-size: medium;">Flex Builder3是基于Eclipse,为快速的创建应用提供套丰富工具的开发环境.Flex 3 SDK使你能够在AIR上创建并调试Flex应用.</span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;"><br /></span></p>
<p style="padding: 0px; margin: 0px;"><span style="font-size: medium;">3.通过实践来让自己熟悉对桌面应用开发的核心概念.可以参考:</span></p>
<p style="padding: 0px; margin: 0px;"><a href="http://livedocs.adobe.com/flex/3/html/FBHelloWord_1.html" style="font-weight: bold; text-decoration: none; color: #2a5a8a; padding: 0px; margin: 0px;"><span style="white-space: pre;"><span style="font-size: medium;">	</span></span><span style="font-size: medium;">使用Flex Builder3来创建你的第一个AIR应用</span></a></p>
<p style="padding: 0px; margin: 0px;"><a href="http://livedocs.adobe.com/flex/3/html/SDKHelloWorld_1.html" style="font-weight: bold; text-decoration: none; color: #2a5a8a; padding: 0px; margin: 0px;"><span style="white-space: pre;"><span style="font-size: medium;">	</span></span><span style="font-size: medium;">使用Flex 3 SDK来创建你的第一个AIR应用</span></a></p>
</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/198146#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</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, 29 May 2008 10:32:19 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/198146</link>
        <guid>http://puras.javaeye.com/blog/198146</guid>
      </item>
      <item>
        <title>Rails中处理新增加的字段</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/197282" style="color:red;">http://puras.javaeye.com/blog/197282</a>&nbsp;
          发表时间: 2008年05月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在Rails开发中,有时创建完一个Model之后<br /><br />发现所创建的Model少字段<br /><br />这个改起来挺恶心的<br /><br />还好,可以直接运行migrate为Model增加一个字段<br /><br />写法是:<br /><br />script/generate migration add_column_to_model column_name:column_type<br /><br />删除的写法是:<br /><br />script/generate migration remove_column_from_model column:column_type <br /><br />其中add_column_to_model中的model为你所要修改的Model的名称.<br /><br />例子:<br /><br />script/generate migration add_column_to_blog user_id:integer<br /><br /> 之后别忘了更新哦.<br /><br />rake db:migrate <br /><br />PS:现在在自己的机器上测试,发现这种写法比较慢,没有什么数据的情况下,还是喜欢直接drop all, 修改database migrate,再重新的来 db:migrate,反正也没有什么数据,不怕丢失.
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/197282#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 27 May 2008 08:42:57 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/197282</link>
        <guid>http://puras.javaeye.com/blog/197282</guid>
      </item>
      <item>
        <title>使用SyntaxHighlighter来给代码着色</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/197277" style="color:red;">http://puras.javaeye.com/blog/197277</a>&nbsp;
          发表时间: 2008年05月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-family: verdana; font-size: 10px;">
<p style="padding: 0px; margin: 0px;">&nbsp;1.首先下载<a href="http://code.google.com/p/syntaxhighlighter/downloads/list" style="font-weight: bold; text-decoration: none; color: #2a5a8a; padding: 0px; margin: 0px;">SyntaxHighlighter</a>.</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">2.解压到SyntaxHighlighter目录中.</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">3.建立HTML文件:</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">&lt;pre name="code" class="Ruby"&gt;</p>
<p style="padding: 0px; margin: 0px;">&nbsp;...Ruby代码...</p>
<p style="padding: 0px; margin: 0px;">&lt;/pre&gt;</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">可以应用在pre和textarea两种HTML标签内,name为code,class为要着色的语言,现在支持C, C#, CSS, Delphi, Java, JScript, Php, Python, Ruby, Sql, VB, XML这些语言.</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">4.加入所需的CSS和JS文件:</p>
<p style="padding: 0px; margin: 0px;">&lt;link rel="stylesheet" type="text/css" href="./lib/SyntaxHighlighter/Styles/SyntaxHighlighter.css" /&gt;</p>
<p style="padding: 0px; margin: 0px;">&lt;script src="./lib/SyntaxHighlighter/Scripts/shCore.js"&gt;&lt;/script&gt;</p>
<p style="padding: 0px; margin: 0px;">&lt;script src="./lib/SyntaxHighlighter/Scripts/shBrushRuby.js"&gt;&lt;/script&gt;</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">这里只用了Ruby,其他的类似.</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">5.接下来就是在window的onload事件内,让SyntaxHighlighter工作起来.</p>
<p style="padding: 0px; margin: 0px;">window.onload = function() {</p>
<p style="padding: 0px; margin: 0px;">dp.SyntaxHighlighter.ClipboardSwf = './lib/SyntaxHighlighter/Scripts/clipboard.swf';</p>
<p style="padding: 0px; margin: 0px;">dp.SyntaxHighlighter.HighlightAll("code");</p>
<p style="padding: 0px; margin: 0px;">};</p>
<p style="padding: 0px; margin: 0px;">&nbsp;</p>
<p style="padding: 0px; margin: 0px;">之后,刷新下页面,你就会发现,代码已经被着上了相应的颜色了.</p>
<div><br /></div>
</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/197277#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 27 May 2008 08:34:33 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/197277</link>
        <guid>http://puras.javaeye.com/blog/197277</guid>
      </item>
      <item>
        <title>Grails-帮忙测试一下</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/145523" style="color:red;">http://puras.javaeye.com/blog/145523</a>&nbsp;
          发表时间: 2007年12月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          关于之前的一篇文章里提到的,Grails经常报异常,导致要经常重启服务器.今天来到公司,又测试了一下,结果还是令人失望的...<br /><br />环境:WinXP+grails-1.0-RC1+Groovy(1.0, 1.1 Rc3,和Grails里的1.1 Rc1, 全试过了)+JDK1.5(我在怀疑是不是JDK的原因)<br /><br />过程如下:<br /><br />创建一个应用:<br /><br />grails create-app<br /><br />->test<br /><br />之后创建一个Domain Class -> User:<br /><br />grails create-domain-class<br /><br />user<br /><br />此时启动服务器:<br /><br />grails run-app<br /><br />之后再创建Controller:<br /><br />grails create-controller<br /><br />user<br /><br />这个时候,访问这个Controller是没有问题的<br /><br />提示也正常<br /><br />如果此时将Controller内改成动态的脚手架<br /><br />修改UserController类,删除def index = {},添加:<br /><br />def scaffold = User<br /><br />or<br /><br />def scaffold = true<br /><br />再刷新页面,就会报异常,说是找不到UserDomain之类的<br /><br />此时不做任何修改,重启服务器<br /><br />再进来,一切常......<br /><br /> <br /><br />麻烦有时间的朋友按照我这个过程测试下,是否有异常产生<br /><br />谢谢撒~~~~~<br /><br /> <br /><br />PS:我的这个过程应该没有什么问题吧?
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/145523#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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, 03 Dec 2007 09:54:34 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/145523</link>
        <guid>http://puras.javaeye.com/blog/145523</guid>
      </item>
      <item>
        <title>[提问]关于将Struts2.0布署到WebSphere6.0下的问题 </title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/144792" style="color:red;">http://puras.javaeye.com/blog/144792</a>&nbsp;
          发表时间: 2007年11月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          因为项目需要,要将Struts2.0的一个应用布署到WebSphere6.0下<br />已将应用所需的Struts2的Jar包全都转换成了J4版的<br />现在发现一个问题<br />就是在&lt;s:property value="getText('login.title')" />类似的标签中<br />在页面上显示出来的却是login.title<br />不知道是怎么回事<br />如果是没有解析,那应该直接显示标签,或是getText('login.title')这样的内容啊<br />可是却只显示了里面的内容<br />而相应的资源文件也都存在<br />在Tomcat下测试是没问题的(JDK1.4+Struts2.0-J4)<br /><br />请问这是怎么回事?<br />谢谢先~~~~~~~~
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/144792#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 29 Nov 2007 11:45:07 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/144792</link>
        <guid>http://puras.javaeye.com/blog/144792</guid>
      </item>
      <item>
        <title>使用Ext的Grid,Form,Dialog来实现分页列表,创建,修改,删除的例子</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/123266" style="color:red;">http://puras.javaeye.com/blog/123266</a>&nbsp;
          发表时间: 2007年09月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          为了测试一些功能写的<br />代码有些乱<br /><br /><br />用于列表显示的结果的JSON数据结构样例:<br /><pre name="code" class="java">
{
  "totalCount":58, 
  "roleList":[
    {
       "id":1,
       "description":"description1",
       "name":"puras1",
       "createDate":"Wed Sep 12 11:28:46 CST 2007",
       "updateDate":"Wed Sep 12 11:28:46 CST 2007"
    },
    {
        "id":2,
        "description":"description2",
        "name":"puras2",
        "createDate":"Wed Sep 12 11:28:46 CST 2007",
        "updateDate":"Wed Sep 12 11:28:46 CST 2007"
    },
    {
        "id":3,
        "description":"description3",
        "name":"puras3",
        "createDate":"Wed Sep 12 11:28:46 CST 2007",
        "updateDate":"Wed Sep 12 11:28:46 CST 2007"
    },
    {
        "id":4,
        "description":"description4",
        "name":"puras4",
        "createDate":"Wed Sep 12 11:28:46 CST 2007",
        "updateDate":"Wed Sep 12 11:28:46 CST 2007"
    },
    {
        "id":5,
        "description":"description5",
        "name":"puras5",
        "createDate":"Wed Sep 12 11:28:46 CST 2007",
        "updateDate":"Wed Sep 12 11:28:46 CST 2007"
    }
  ]
}
</pre><br />添加,修改,删除后返回的JSON数据结构样例:<br /><pre name="code" class="java">
json = "{success : true, info : '添加成功'}"
json = "{failure : true, info : '添加失败'}"
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/123266#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 12 Sep 2007 13:49:03 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/123266</link>
        <guid>http://puras.javaeye.com/blog/123266</guid>
      </item>
      <item>
        <title>在Struts2中使用Groovy来编写Action</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/119742" style="color:red;">http://puras.javaeye.com/blog/119742</a>&nbsp;
          发表时间: 2007年09月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原文地址:<a href="http://www.blogjava.net/puras/archive/2007/09/03/142221.html" target="_blank">http://www.blogjava.net/puras/archive/2007/09/03/142221.html</a><br /><br />今天在查关于Struts2和Ajax方面的资料的时候,发现一个在Struts2中使用Groovy编写Action的插件.因为本身就对Groovy比较感兴趣,但因为最近的工作,没有多少时间来研究,看到这个插件,哈,正好可以在这段时间的应用中使用到,这样就可以在工作中应用Groovy啦.<br /><br />这个插件是:s2ss(Struts 2 Scripting Support), 地址:<a href="http://code.google.com/p/s2ss/" target="_blank">http://code.google.com/p/s2ss/</a><br /><br />下载地址:<a href="http://s2ss.googlecode.com/files/struts2-groovy-plugin-0.2.jar" target="_blank">http://s2ss.googlecode.com/files/struts2-groovy-plugin-0.2.jar</a><br /><br />将这个Jar包放到WEB-INF/lib下,之后修改struts.properties,添加一行:<br />[code]
struts.objectFactory=groovyObjectFactory
[/code]<br />也可以修改struts.xml,添加下面一行:<br />[code]
&lt;constant name="struts.objectFactory" value="groovyObjectFactory" />
[/code]<br />个人习惯使用后面一种.<br /><br />再将Groovy的包放到WEB-INF/lib下,我用的是groovy-all-1.0.jar.<br /><br />这个插件所依赖的包有:<br /><ul><br />Struts 2.0.x (struts2-api-2.0.x.jar, struts2-core-2.0.x.jar) <br />Groovy 1.0 (groovy-all-1.0.jar) <br />XWork 2.x (xwork-2.0.x.jar) <br />Commons Loggings 1.0 (commons-logging-1.0.4.jar)<br /></ul><br />在struts.xml中配置Action,与正常的配置差不多,只不过class里用的是Groovy的类,而且需要加上Groovy的扩展名,如下:<br />[code]
&lt;action name="groovy" class="com.puras.groovy.TestAction.groovy">    
    &lt;result>/WEB-INF/pages/groovy/test_action.jsp&lt;/result>
&lt;/action> 
[/code]<br />拦截器与Action相似, <br />[code]
..
&lt;interceptor name="groovyInterceptor" class="com.puras.groovy.Interceptor.groovy" />
..
&lt;interceptor-ref name="groovyInterceptor" /> 
[/code[
这里就只演示Action的了.呵

下面来编写TestAction.groovy:
[code]
package com.puras.groovy; 

class TestAction { 

  def message;
  def execute() {
      message = "Hello world"
      return "success"
  }
  def getMessage() {
      return message
  }
} 
[/code]<br />不用进行编译,直接将.groovy文件复制到WEB-INF/classes/com/puras/groovy/下就可以了.<br /><br />类之间的调用等,与使用Java相同.<br /><br />最后再编写一下用于显示的test_action.jsp就OK啦.代码如下:<br />[code]
&lt;%@ page contentType="text/html;charset=UTF-8" language="java" %>
&lt;%@ taglib prefix="s" uri="/struts-tags" %>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8">
&lt;title>Insert title here&lt;/title>
&lt;/head>
&lt;body>
&lt;s:property value="message"/>
&lt;br />
&lt;hr />
&lt;/body>
&lt;/html> 
[/code]<br />现在,启动你的WEB服务器,之后打开浏览器,输入地址:http://localhost:8080/your_webapp/groovy.action,就可以看到效果了.<br /><br />下一步目标:<br /><br />加入Spring <br />加入Ajax
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/119742#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Mon, 03 Sep 2007 11:08:11 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/119742</link>
        <guid>http://puras.javaeye.com/blog/119742</guid>
      </item>
      <item>
        <title>Grails--一个登录的小实例</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/104358" style="color:red;">http://puras.javaeye.com/blog/104358</a>&nbsp;
          发表时间: 2007年07月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这份指南的目标是展示如何创建一个简单的Grails登录实例.这不是第一份指南,你应该已经运行过Grails的Quick Start指南了,<br />如果没有可以查看<a href="http://www.blogjava.net/puras/articles/131013.html" target="_blank">Quick Start</a>,了解Grails应用的入门知识.<br />一个复杂的,完整的权限的例子,可以查看下载的Grails里的CMS例子.<br />首先我们以User模型开始,包含email(用于登录)和密码.<br />这个模型用于登录并将其存到Session中.下面的例子只是显示了很少一部分信息:<br /><pre name="code" class="java">
class User { 
    Long id
    Long version

    String email
    String password

    String toString() {
        "$email"
    }

    static constraints = {
        email(email: true)
        password(blank: false, password: true)
    }
}</pre><br />接下来我们添加一个简单的用户到grails-app/conf的启动里.这仅仅是创建一个用户实例用到测试登录,并保存写入的注册信息:<br /><br /><pre name="code" class="java">class ApplicationBootStrap {
     def init = { servletContext ->
    new User(email: "puras@163.com", password: "123456").save()
     }
     def destroy = {
     }
} </pre><br />接下来创建一个简单的Plant模型,如下面代码所示.这个模型是我们的测试模型,目的是用来做示范:<br /><pre name="code" class="java">class Plant { 
    Long id
    Long version

    String description
    Boolean validated
    String hardiness
    Boolean evergreen
    String annual
    String genus
    String genusHybrid
    String species
    String speciesHybrid
    String variety
    String subSpecies
    String cultivar
    String forma

    static constraints = {
        hardiness(inList:["Hardy", "Half Hardy", "Tender"])
        annual(inList:["Annual", "Perennial", "Biennial"])
    }

    String toString() {
        "${this.class.name}: $id"
    }

    boolean equals(other) {
        if (other?.is(this)) return true
        if (!(other instanceof Plant)) return false
        
        if (!id || !other?.id || id != other?.id) return false

        return true
    }

    int hashCode() {
        int hashCode = 0
        hashCode = 29 * (hashCode + (!id ? 0 : id ^ (id >>> 32)))
    }
}</pre><br />接下来,我们需要创建一个PlantController:<br /><pre name="code" class="java">class PlantController {
    def beforeInterceptor = [action:this.&checkUser, except: ['index', 'list', 'show']]
    
    def scaffold = Plant

    def checkUser() {
        if (!session.user) {
            // i.e. user not logged in
            redirect(controller:'user', action:'login')
            return false
        }
    }
}</pre><br />这个控制有下结额外的特征.首先,它添加了一个beforeInterceptor,在调用控制器的方法前先调用一个方法(这个概念类似面向方面编程). <br />在这个例子中,checkUser被调用,&仅仅是指向这个方法.这还有一个排除列表,使这个拦截器在index,list和show方法上失效.<br />标准的脚手架是在创建,修改,删除,保存和更新之前调用这个checkUser方法.在这个例子中,我们在创建,更新或是删除之前调用方法检查是否登录,<br />而在读取或展示Plants列表的时候不预处理.注意beforeInterceptor是如何在无效时返回false的,如果在Session中不包含User实体则返回false.<br />在我们没有添加 User实体之前,我们期待在执行Plant的<br />create/update/delete方法时进行重定向(排除list, index和show).<br />现在运行这个应用程序,并尝试试问http://localhost:8080/login/plant <br />(login是我这个应用的名称).你可以看到下面的界面(显示出来是因为list方法没有调用checkUser方法):<br /><img src="http://www.blogjava.net/images/blogjava_net/puras/1.png" /><br />如果没有发生什么事件,先确认一下你是否执行了"grails run-app"并且在<br />启动的时候没有错误(比如端口和Tomcat冲突).如果依然不能工作,请重新尝试下<a href="http://www.blogjava.net/puras/articles/131013.html" target="_blank">GRails--Quick Start</a>指南.<br />一旦你看到了上面的图片显示的内容, 点击New Plant链接.你将看到:<br /><pre name="code" class="java">HTTP ERROR: 404
Not Found
RequestURI=/login/user/login

Powered by Jetty://</pre><br />我们重定向到了user/login视图,但我们还没有创建它.所以,创建一个login.gsp:<br /><pre name="code" class="java">&lt;html>
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
&lt;meta name="layout" content="main" />
&lt;title>User Login&lt;/title>
&lt;/head>
&lt;body>
    &lt;div class="body">
        &lt;g:form action="doLogin" method="post">
            &lt;div class="dialog">
                &lt;p>Entry your login details below:&lt;/p>
                &lt;table class="userForm">
                    &lt;tr class="prop">
                        &lt;td valign="top" style="text-align:left;" width="20%">
                            &lt;label for="email">Email:&lt;/label>
                        &lt;/td>
                        &lt;td valign="top" style="text-align:left;" width="80%">
                            &lt;input id="email" type="text" name="email" value="${user?.email}" />
                        &lt;/td>
                    &lt;/tr>
                    &lt;tr class="prop">
                        &lt;td valign="top" style="text-align:left;" width="20%">
                            &lt;label for="password">Password:&lt;/label>
                        &lt;/td>
                        &lt;td valign="top" style="text-align:left;" width="80%">
                            &lt;input id="password" type="password" name="password" value="${user?.password}" />
                        &lt;/td>
                    &lt;/tr>
                &lt;/table>
            &lt;/div>
            &lt;div class="buttons">
                &lt;span class="formButton">
                    &lt;input type="submit" value="Login">&lt;/input>
                &lt;/span>
            &lt;/div>
        &lt;/g:form>
    &lt;/div>
&lt;/body>
&lt;/html>
</pre><br />我们同样需要一个UserController,并且有一个login的方法:<br /><pre name="code" class="java">
class UserController {
    def login = {
    }
}
</pre><br />现在再次点击New Plant链接.你将看到如下的界面:<br /><img src="http://www.blogjava.net/images/blogjava_net/puras/2.png" /><br />在我们没有登录时,进行的重定向,到了/user/login,排除list,index和show这几个可以忽略登录的方法.如果你尝试登录,你将得到:<br /><pre name="code" class="java">
HTTP ERROR: 404
Not Found
RequestURI=/login/user/doLogin

Powered by Jetty://
</pre><br />现在,我们需要向UserController里添加doLogin方法.这里是整个Controller的代码:<br /><pre name="code" class="java">
class UserController {
    def index = {
        redirect(controller:'user', action: 'login')
    }
    
    def login = {
    }
    
    def doLogin = {
        def user = User.findWhere(email:params['email'], password:params['password'])
        session.user = user
        if (user) 
            redirect(controller: 'plant', action: 'list')
        else
            redirect(controller: 'user', action: 'login')
    }
}
</pre><br />User.findWhere是执行"where email='email' and password='password'"的一个非常简单的方式.<br />我们存储对旬到session中,将会替换掉已经存在的对象.之后我们重定向到 plant/list(如果成功)或是user/login(如果失败,重新登录).<br />现在尝试进行登录,输入一个合法的用户:email->puras@163.com, password->123456(在启动文件里添加的测试数据),之后检查登录,<br />你将会看到plant的list页面.点击New Plant链接, 你将看到如下界面:<br /><img src="http://www.blogjava.net/images/blogjava_net/puras/3.png" /><br />你也可以检查一下如果你输入了错误的密码,是否给你重定向到了login页面.<br /><br />上面只是一个简单的小例子,你可以自己再添加一些其他的功能,以完善这个例子.<br /><br />原文:<a href="http://www.blogjava.net/puras/articles/131091.html" target="_blank">http://www.blogjava.net/puras/articles/131091.html</a><br />译至:<a href="http://www.strattonenglish.co.uk/login_tutorial.pdf" target="_blank">http://www.strattonenglish.co.uk/login_tutorial.pdf</a>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/104358#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 23 Jul 2007 09:56:12 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/104358</link>
        <guid>http://puras.javaeye.com/blog/104358</guid>
      </item>
      <item>
        <title>谁来负责？</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/89705" style="color:red;">http://puras.javaeye.com/blog/89705</a>&nbsp;
          发表时间: 2007年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          早上在班车上听广播<br />听到一些令人气愤的事<br />比如说<br />有一个是行政执法部门和拆迁办一起拆违章建筑<br />产生了一些建筑垃圾<br />可是事后无人负责清理<br />时间一久<br />附近一些由于生活垃圾筒不能满足人们需求<br />则把一些生活垃圾也丢弃在上面所说的产生的建筑垃圾一起<br />搞的这些垃圾是又脏又臭<br />早上报了两个这样的事件<br />一个是在一年前产生的建筑垃圾<br />托了一年也没人管<br />还有一个是4月份的<br />算算也有近两个月了<br /><br />记者就这事去一些相关部门询问<br />到了行政执法部<br />工作人员说这事归拆迁办负责<br />到了拆迁办<br />工作人员说这事归拆迁服务公司负责<br />到了拆迁服务公司<br />又说归某领导负责<br />而此领导则一直在开会<br />记者等了两天<br />也没有见到此领导的面<br />又或是归别的部门管<br />到最后<br />搞的不知道应该归谁管了<br /><br />一直在宣传<br />百姓事，无小事<br />可是真正到有事的时候<br />才发现<br />全是狗屁<br />记者跟这事<br />都被来回的踢球<br />如果是一个老百姓呢<br />而且<br />哪个老百姓有这么多的时间呢<br />那么多部门<br />分的倒是挺细<br />但是就是没有一个能办事的<br />花钱、FB个个能行<br />办事就全部没音了<br /><br />老百姓的事<br />谁来负责？
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/89705#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 13 Jun 2007 08:35:32 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/89705</link>
        <guid>http://puras.javaeye.com/blog/89705</guid>
      </item>
      <item>
        <title>走进Groovy世界－－String</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/89512" style="color:red;">http://puras.javaeye.com/blog/89512</a>&nbsp;
          发表时间: 2007年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <img src="/images/smiles/icon_sad.gif"/>发现自己的学习速度犹如老牛拉车，不是一般的慢啊。<br />今天刚刚把文档写完，本打算下午评审，想想，休息一下午吧，看看Groovy。<br />虽然速度慢，但只是小小小小的一步，也算是进步啊。<br /><br />前几天看了一些Groovy入门和关于基本类型的东西，再前进一些，便到了字符串了，本来是想看完正则表达式一块写的，无奈不知那些何时才能看完，怕到时候看的这部分也忘光了，还是先流水账般记录一下，以便有时间再看的时候，也可以有忆可回。<br /><br />Groovy中提供了两种String类型：普通的String(java.lang.String)和GStrings(groovy.lang.GString)。比Java更丰富了一些。<br /><br />GString中，允许使用占位符，在这Java里是没有的，JSTL标签里有，吼吼，在看Ruby的时候，就在想，如果Java里有这个功能，在生成一些字符串的时候，如生成一条SQL脚本，应该会省很多力啦。格式类似于如"Hello, ${name}"。<br /><br />在Java里，只提供了一种字符串的表现形式，就是使用双引号将字符串括起。而在Groovy中，却提供了几种不同的方式：<br />单引号：不会处理为GString，类似于Java里的String；<br />双引号：如果不包含占位符标识，则与单引号一样。如果含有占位符标识，则会理解为一个GString；<br />三个引号(单引或双引)：允许一个字符串跨越多行，中间不用像Java中那样用＋连接起来，会不区别平台的在每行的结尾自动的加上\n，而且会保留换行之后行首的空白(这点俺越不喜欢)。单引和双引的区别跟上面一样；<br />斜线/：允许字符串在存在\而不会对其转义，常用于正则表达式，如果\后跟u时，将进行转义。<br />其中，只有使用斜线时，才会偶尔的对反斜线进行转义，其他的几种均会对反斜线进行转义。在双引号中使用单引号，不需要进行转义，反之亦然。<br /><br />上面的第一种表现形式是使用单引号，而在Java中，单引号一般用来表示Char型的数据。那如果在Groovy里要定义Char型数据要怎么办呢？ 解决办法之一就是在定义变量之时，就指变量类型，如：<br /><pre name="code" class="java">char x = 'x'
Character x = 'x'</pre><br />两种写法都是定义一个java.lang.Character类型的变量。<br />另一个解决办法就是将字符串的转型为Char的，如：<br /><pre name="code" class="java">def x = 'x' //此处为String
def c = x as char
或是
def c = x.toCharacter()
</pre><br />此时的变量c，则是Char型的了。<br /><br />使用GString时，需使用双引号将内容括起，插入变量时可以使用${变量}，也可以使用简短模式$变量，需要使用$的时候，需要用反斜线进行转义\$。<br /><br />Groovy里的字符串操作同Java里的基本一致，而且还提供了一些简单的写法，如想打印一条语句，下面的写法在Java和Groovy里都是有效的：<br /><pre name="code" class="java">System.out.println("Hello, World!")</pre><br />使用Groovy提供的简单写法，可以去掉前面的前缀：<br /><pre name="code" class="java">println("Hello, World!")</pre><br />也可以省略掉方法后面的小括号：<br /><pre name="code" class="java">println "Hello, World!"</pre><br />比较一下，比Java里的简单了好多。<br /><br />Groovy里还提供了一些Java没有的方法，下面是摘抄自《Groovy In Action》：<br /><pre name="code" class="java">
greeting = 'Hello Groovy!'
assert greeting.startsWith('Hello')
assert greeting.getAt(0) == 'H'
assert greeting[0] == 'H'
assert greeting.indexOf('Groovy') >= 0
assert greeting.contains('Groovy')
assert greeting[6..11] == 'Groovy'
assert 'Hi' + greeting - 'Hello' == 'Hi Groovy!'
assert greeting.count('o') == 3
assert 'x'.padLeft(3) == ' x'
assert 'x'.padRight(3,'_') == 'x__'
assert 'x'.center(3) == ' x '
assert 'x' * 3 == 'xxx'
</pre><br />基本上上面的方法，通过字符意思，都能明白是怎么回事，更多的方法和资料，查阅API文档吧。<br /><br />流水账记录完毕。没有对Groovy有个整体的认识，所以有时理解一些东西的时候，不能更好的把握，或许随着了解的逐渐加深，情况会慢慢变好吧，但愿吧！<img src="/images/smiles/icon_redface.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/89512#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Tue, 12 Jun 2007 17:21:08 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/89512</link>
        <guid>http://puras.javaeye.com/blog/89512</guid>
      </item>
      <item>
        <title>郁闷的一天！</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/89431" style="color:red;">http://puras.javaeye.com/blog/89431</a>&nbsp;
          发表时间: 2007年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          上周五和同事一起去吃饭，去的饭店是另一个同事家开的，因为总在公司的内网上宣传，所以就邀了同事一起去了。<br />    进了饭店，就把背包放在了身边的椅子上，伤心的选择......<br />    刚去的时候，人还不算多，同事还亲自过来帮我们点菜，感觉挺不错的。在我们点菜的时候，人渐渐的多了起来，有两个男子就坐在我们背后的位置上。<br />    只顾着聊天去了，还记得那两个男子走的时候，同事还问了一句，不在这吃了嘛之类的话，而自己也没注意什么。<br />    等吃到一半的时候，也不知是为什么，突然看了一下包，结果发现背包不见了，以为是同事帮忙收起来了，问之，没有。<br />    当时就想，应该是刚才的两个男子偷走了，想过报警，可惜就算报了也没什么作用，一起吃饭的还有同事的朋友，是做刑警的，呵。而且在同事家的饭店，报警影响也不好。<br />    也没有心情吃了，又呆了一会同事便开车给我送回了家。<br />    刚回到家，老爸就打电话来问我是不是包丢了，我还在想，消息不会这么灵通吧，我还没说呢，他们怎么知道。接下来他说是派出所打电话叫我去取包，我还在纳闷，派出所怎么知道我家里的电话呢？<br />    立马打电话叫朋友回来，开车陪我去派出所，取回物品。所幸银行卡之类的都还在，盘点了一下丢的东西：一个背包，一个钱包，一部手机，一张医保卡，600块现金。折现的话有三千多吧。<br />    郁闷啊，就当朋友说：破财免灾吧，唉。<img src="/images/smiles/icon_cry.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/89431#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 12 Jun 2007 11:58:18 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/89431</link>
        <guid>http://puras.javaeye.com/blog/89431</guid>
      </item>
      <item>
        <title>人就是贱啊！</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/86611" style="color:red;">http://puras.javaeye.com/blog/86611</a>&nbsp;
          发表时间: 2007年06月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          中午时接到通知<br />让本人在接下来的两周内做一个J2ME的应用<br />听到这个消息<br />兴奋了一小下<br />呵<br />为什么<br />想想也是很久以前看过J2ME方面的东西<br />但没有真正的做过什么<br />而且已经有很长时间没有从事真正的开发了<br />一直不是这样或那样的闲事<br />不过更多的时间都是闲着<br />虽然闲着也不错<br />可以自己看看新的东西<br />可是整天没事做<br />也很无聊的<br />跟朋友说起<br />朋友说：人就是贱啊<br />呵呵<br />确实有点哦<br />有事做的时候想闲着<br />闲着的时候又想有事做<br />矛盾啊<br />好啦<br />准备准备<br />得开工啦
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/86611#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Mon, 04 Jun 2007 15:12:17 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/86611</link>
        <guid>http://puras.javaeye.com/blog/86611</guid>
      </item>
      <item>
        <title>走进Groovy世界－－世界基石</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/85377" style="color:red;">http://puras.javaeye.com/blog/85377</a>&nbsp;
          发表时间: 2007年06月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          原本准备一天写一篇的，只是由于工作的原因，没有那么多时间看书，所以了解的东西自然也就相应的少了，也就没什么东西可写了。<br /><br />    看了一些Groovy的东西后，又有另一样东西吸引了我，那就是她的纯面向对象，呵，面向对象已经听了好多年了，而且也用了好多年了，但大家都知道，既使是我们熟悉的Java，也不是纯面向对象的，在Java里，同时存在着原类型和对象，而在Groovy里，却是一切皆为对象。<br /><br />    大家都知道，Java里是不能对原类型执行一些平时对对象所做的操作的，如toString()这些，如果想要这样做，则需将其转换成相对应的Wrapper，在Java里原类型相应的都有一些Wrapper，如int对应的java.lang.Integer。<br /><br />虽然在Groovy里，你可能也会看到如Java里定义原类型一样的语句，如：<br /><pre name="code" class="java">int i = 1</pre><br />    表面上是一样，但实际上，她还是会把变量转换成类似于Java里的Wrapper类型的，也就是说，你可以对变量i执行如toString()这些在Java不能对原类型执行的方法。原因就是因为在Groovy里一切皆为对象，呵，是不是很吸引人？<br /><br />与Java相似，在定义基本的数据类型时，可以直接根据字面指定，如：<br /><pre name="code" class="java">Integer -> 100
Long -> 100L/100l
Float -> 100F/100f
Double -> 100D/100d</pre><br />在这里比Java多了两个可以直接由字面表示的类型：<br /><pre name="code" class="java">BigInteger -> 100G/100g
BigDecimal -> 100.123G/100.123g</pre><br />在数据后加G(or g)来标识这两种类型。<br /><br />BigDecimal为非整型的数字的默认类型，如果不使用Float和Double的后缀标识，如F或D，将使用BigDecimal。<br /><br />在Groovy里定义变量也有很趣，可以有两种方式，一种是定义静态类型，也就是在定义之初就指定变量的类型，如：<br /><pre name="code" class="java">int i = 100
String s = "hello"</pre><br />还有一种，则是动态类型，在定义的时候不指定其类型，之后可以随意的更改此对象的类型，如：<br /><pre name="code" class="java">def i = 100
i = "string"
i = true</pre><br /><br />在Java里，一些操作符，如+, -, *, /这些，只是对原类型数据进行操作的，虽然个别的也可以由其他类型使用。但在Groovy里，这些对应的全是方法，这样的写法只是一种简写，它还会调用相应的类里面的方法的，如100+200，其实是调用100.plus(200)；100-200调用的是100.minus(200)。所有的这些，都是对方法的调用。<br /><br />在Groovy里，这些操作符将不再是原类型的专用，你完全可以执行这样的操作：<br /><pre name="code" class="java">
Person p1 = new Person()
Person p2 = new Person()
Person p3
p3 = p1 + p2
p3 = p1 - p2
p3 = p1 * p2
p3 = p1 / p2
println p1 == p2</pre><br />执行上面的例子的前提是Person类实现了相应的方法。这里只是随便瞎写一个例子，一点实际意义都没有。另外，在重载equals时，最好复写hashCode方法，重载这个方法已经不新鲜了，参见java.lang.Object#equals，在这里一块写出来，只是为上说明，可以直接用==操作符来简写equals方法的调用。<br /><pre name="code" class="java">class Person {
	private String name
	
	Person() {}
	
	Person(name) {
		this.name = name
	}
	
	Person plus(Person b) {
		if (null == b) return null
		return new Person(this.name + " + " + b.name)
	}
	
	Person minus(Person b) {
		if (null == b) return null
		return new Person(this.name + " - " + b.name)
	}
	
	Person multiply(Person b) {
		if (null == b) return null
		return new Person(this.name + " * " + b.name)
	}
	
	Person div(Person b) {
		if (null == b) return null
		return new Person(this.name + " / " + b.name)
	}
	
	Person mod(Person b) {
		if (null == b) return null
		return new Person(this.name + " % " + b.name)
	}
	
	Person power(Person b) {
		if (null == b) return null
		return new Person(this.name + " ** " + b.name)
	}
	
	boolean equals(Object b) {
		if (null == b) return false
		if (!(b instanceof Person)) return false
		if (this.name != b.name) return false
		return true
	}
	
	int hashCode() {
		return this.name.hashCode()
	}
}</pre><br /><br />看到这些，让我想起在学C++时最讨厌的运算符重载，呵呵，不过在这里确实是存在的。<br /><br />在Groovy里，可以重载的方法有很多，可以相阅相关的资料来了解，在《Groovy in Action》上有详细的列表。<br /><br />虽然这对于Java是一个进步，但我却不是很喜欢这种方式，因为要实现＋，我在程序里要实现的却是plus方法，而在Ruby里，直接实现+就OK了，或许是因为历史原因吧，还没有深入的研究，不过猜想应该是Java的罪过。<br /><br />虽然人家都说，时间就像乳沟一样，挤挤总会有的，但这段时间确实是太忙了，所以进度也是奇慢无比，只能给自己一个借口，美其名曰：小步前进。呵
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/85377#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><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><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Jun 2007 10:07:16 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/85377</link>
        <guid>http://puras.javaeye.com/blog/85377</guid>
      </item>
      <item>
        <title>走进Groovy世界－－来到大门前</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/84133" style="color:red;">http://puras.javaeye.com/blog/84133</a>&nbsp;
          发表时间: 2007年05月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在网上无意间发现了Groovy，猜想无非又是一种动态的脚本语言，根本没有重视她，但本着对新东西的好奇，便看了看网站上对她的介绍，但大多数的都是在说Groovy On Grails的，于是到她的主页(<a href="http://groovy.codehaus.org/" target="_blank">http://groovy.codehaus.org/</a>)上瞧了一瞧。首先吸引我的，便是主页上对Groovy的介绍，“An agile dynamic language for the Java Platform”。因为本人平常也是从事Java开发的，所以看到与Java相关的东西，总是会有一种特别的感情。随后又深入的看了看关于她的介绍，发现她居然可以与Java无缝的结合，对于这一点，我也只是从网站上看到的，朋友也问过我，可以做到真正的无缝么？我现在还回答不了，等进一步了解了之后，我会给他一个满意的回答，其实，这也是Groovy对我最大的吸引之处。于是乎，暂时停止对Ruby的学习，转而来到Groovy的世界，但愿 Groovy不要让我失望。<br /><br />    由于本人记性不好忘性强，所以把自己学习的过程一步步的记录下来，避免哪天休假回来以前学过的东西全忘掉了，还要去看那些非母语的东西，我讨厌英语-_-!<br /><br />    从最基本的开始，想要使用她，则必须要先安装她啦，首先从主页上把Groovy下载回来，时至今日，Groovy的当前版本是1.1-bate-1，但我不喜欢用Bate版的，所以还是用1.0喽，可以到<a href="http://groovy.codehaus.org/Download" target="_blank">http://groovy.codehaus.org/Download</a>来下载相应的版本。<br /><br />    把下载回来的ZIP文件解压到指定的位置，比如d:\groovy-1.0，之后在环境变量中设置Groovy的环境变量GROOVY_HOME，并将%GROOVY_HOME%/bin添加到path中，这样就可以在命令提示符下使用了。<br /><br />    在这里有个小问题，不知道是我设置的问题，还是Groovy本身的问题，她的路径中不能包含空格，否则在命令提示符下将找不到她，比如我之前将她放到了 D:\Program Files\groovy-1.0这个位置，设置好了环境变量之后，在命令提示符下执行相应的命令，却提示找不到。<br /><br />    设置完上面的之后，可以在CMD上面执行一下groovy，如果显示出了相应的提示，则证明你已经设置好了。<br /><br />    下行再说说如何执行Groovy，她可以直接以脚本方式运行，也可以编译成Java的Classes之后运行，首先讲一下直接运行。<br /><br />    Groovy提示了三种运行脚本的方式：<br /><br />    * groovy->启动执行Groovy脚本的解析程序。可以指定一行单独Groovy脚本或是一个已存在的Groovy文件做为命令行的参数。<br /><br />groovy println "Hello world!"<br />groovy hello (注：执行当前路径下的hello.groovy文件)<br /><br />    * groovysh->一个交互执行Groovy的代码Shell命令提示符。可以输入单条的语句，也可以输入整个的脚本片段，之后通过 Go语句来执行之前的语句，功能比groovy要丰富的多，在提示符下打help查看可以使用的命令，都有相应的提示，使用也比较简单。<br /><br /><br />    * groovyConsole->图形界面形式的交互执行Groovy代码。可以像使用编辑器一般在里面输入代码，或是加载一个已有的文件，之后通过CTRL+R或CTRL+Enter来执行。相比之下，这个图形界面功能要比之前的两个强大的多，可以新建，保存，打开文件，可以说是一个小型的编辑器了。<br /><br /><br />    具体使用哪种，可以随意选择。<br /><br />    Groovy提供了一个groovyc的命令，来将Groovy文件编译成.class文件，这样就可以直接用java来执行了，下面举例说明：<br />参照《Groovy In Action》，写一个Fibonacci的例子，并保存在当前目录下的Fibonacci.groovy文件中，<br /><br /><br /><pre name="code" class="java">current = 1
next = 1
20.times {
	print current + " "
	tmp = next
	next += current
	current = tmp
}

println ""</pre><br /><br />    之后执行<br /><br /><pre name="code" class="java">groovyc -d classes Fibonacci.groovy</pre><br /><br />    将Fibonacci.groovy编译成class形式，其中的-d与后面的classes是标识生成的class文件的存放位置，当然，你完全可以不使用它，把编译生成的class文件直接扔在当前目录。<br /><br />    编译过后，便可以直接使用Java的java命令来执行这段由Groovy编写的程序啦，<br /><br /><pre name="code" class="java">java -cp %GROOVY_HOME%/embeddable/groovy-all-1.0.jar;classes; Fibonacci</pre><br /><br />    此后你应该可以看到程序执行的结果了。<br /><br />    好啦，今天就先写这些啦，一个非常非常简单的小笔记，我想随着不断的深入Groovy，以后也会写一些有点深度的东西吧，呵。
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/84133#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Tue, 29 May 2007 10:02:22 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/84133</link>
        <guid>http://puras.javaeye.com/blog/84133</guid>
      </item>
      <item>
        <title>JGroups之皮毛</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/81783" style="color:red;">http://puras.javaeye.com/blog/81783</a>&nbsp;
          发表时间: 2007年05月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          前些天看了些关于JGroups方面的资料，怕时间久了将之忘于脑后，觉得有必要记录一下，这样日后就不用再从头看啦。<br />    现在有很多项目都使用JGroups做底层的通讯，知道的开源项目有JBoss Cache和OSCache用它做为底层支持来实现集群的，一定还有其他的项目也用到了，只不过我不知道而已了。<br />    JGroups是一个可靠的组间通讯工具，进程可以加入一个通讯组，给组内所有的成员或单独的成员发送消息，同样，也可以从组中的成员处接收消息。系统会记录组的每一个成员，在新成员加入或是现有的成员离开或是崩溃时，会通知组内的其他成员，这样我们就不必自己去管理这些事情了。<br />    要想加入一个组，并与组内其他的成员交互，必须建立一个Channel连接到组，同一个组内的所有成员使用相同的组名称。首先是创建一个Channel，可以直接实例化一个Channel的实现，这里用的是JChannel：<br /><pre name="code" class="java">JChannel channel = new JChannel(props);</pre><br />参数里指定Channel使用的协议栈，如果是空的，则使用默认的协议栈，位于JGroups包里的udp.xml。参数可以是一个以冒号分隔的字符串，或是一个XML文件，在XML文件里定义协议栈。<br />下面的是JGroups文档里给出的字符串的例子：<br /><pre name="code" class="java">String props="UDP(mcast_addr=228.1.2.3;mcast_port=45566;ip_ttl=32):" +
        "PING(timeout=3000;num_initial_members=6):" +
        "FD(timeout=5000):" +
        "VERIFY_SUSPECT(timeout=1500):" +
        "pbcast.STABLE(desired_avg_gossip=10000):" +
        "pbcast.NAKACK(gc_lag=10;retransmit_timeout=3000):" +
        "UNICAST(timeout=5000;min_wait_time=2000):" +
        "FRAG:" +
        "pbcast.GMS(initial_mbrs_timeout=4000;join_timeout=5000;" +
        "join_retry_timeout=2000;shun=false;print_local_addr=false)";
JChannel channel;
try {
	channel=new JChannel(props);
}
catch(Exception ex) {
// channel creation failed</pre><br />    创建完之后，Channel现在处于未连接状态，需要通过connect方法将之连接到组，使其处于连接状态：<br /><br /><pre name="code" class="java">public void connect(String groupname) throws ChannelClosed;</pre><br /><br />    它的参数就是要加入组的组名字，如果加入的组之前没有任何成员，则会自动创建一个组。<br />    此时，Channel已处于连接状态，可以发送/接收消息了，发送消息的方法为：<br /><br /><pre name="code" class="java">
public void send(Message msg) throws ChannelNotConnected, ChannelClosed;
public void send(Address dst, Address src, Object obj) throws ChannelNotConnected, ChannelClosed;
</pre><br /><br />    两个方法基本是一样的，只不过一个是直接提供一个消息，而另一个只是提供了消息的目的地，源，和消息内容，其实这个方法在内部也是通过第一个方法来实现的，在其内部，将提供的这三个参数组合成一个消息，再调用第一个方法，具体使用哪个方法，则看个人喜好和实际情况了。<br />    消息的由消息的目的地，源，Flag，消息内容，Header组成。其中如果目的地为空，则认为是发给所有组成员的消息；源为空的话，在底层的协议将其放到网络上时，会自动的将本Channel的地址填充进去。Address则是组成员的地址，用于唯一的标识一个组成员的接口，JGroups提供了几种默认的实现。下面的例子是发送一条消息到组内所有的成员处：<br /><br /><pre name="code" class="java">
Hashtable data; // any serializable data
try {
	channel.send(null, null, data);
}
catch(Exception ex) {
// handle errors
</pre><br /><br />再来一个发送到单独的组成员的例子：<br /><br /><pre name="code" class="java">
Address receiver;
Hashtable data;
try {
receiver=channel.getView().getMembers().first();
channel.send(receiver, null, data);
}
catch(Exception ex) {
// handle errors
}
</pre><br /><br />    其中的channel.getView().getMembers().first()是指从Channel中取出当前的成员列表，再从中取出第一个成员。之后就可以将这个成员做为目的地来发送消息了。<br />    可以发送消息，同样也可以接收消息：<br /><br /><pre name="code" class="java">
public Object receive(long timeout) throws ChannelNotConnected, ChannelClosed, Timeout;
</pre><br /><br />    利用此方法可以取回多种消息，如普通的消息，View消息，等等。它的timeout参数则是指定超时的时间，如果设置为0时，而此时又没有新消息可以接收，此方法则会形成一个阻塞，在这一直等到有可用的消息为止；设置为大于0时，如果没有可用消息，超过此值后，会抛出一个Timeout异常。<br />    下面的列表则是可以接收的消息的详细清单：<br /><pre name="code" class="java">
Message
View
SuspectEvent
BlockEvent
UnblockEvent
GetStateEvent
StreamingGetStateEvent
SetStateEvent
StreamingSetStateEvent
</pre><br /><br />    同样，也给出一个此方法的应用小例子：<br /><br /><pre name="code" class="java">
Object obj;
Message msg;
View v;
obj=channel.receive(0); // wait forever
if(obj instanceof Message)
msg=(Message)obj;
else if(obj instanceof View)
v=(View)obj;
else
; // don't handle suspicions or blocks
</pre><br /><br />    receive()方法是Channel主动的去取消息，这种方式在现在的JGroups版本中已经不赞成被使用了，而替代方式则是通过setReceiver()方法向Channel注册一个监听器，在有消息到达的时候，自动的调用相应的方法来处理消息。<br />    setReceiver()方法的参数是一个Receiver接口，此接口继承了MessageListener和MembershipListener，呵，看名字就知道这两个Listener是做什么的了。JGroups里提供了一个Receiver的Adapter：ReceiverAdapter，它只是为Receiver接口里的方法提供了一空的实现，可以让我们在自己的实现中只需实现关心的方法就OK了。下面是一个用注册Receiver的形式接收消息的实例：<br /><br /><pre name="code" class="java">
JChannel ch=new JChannel();
ch.setReceiver(new ReceiverAdapter() {
	public void receive(Message msg) {
		System.out.println("received message " + msg);
	}
	public void viewAccepted(View new_view) {
		System.out.println("received view " + new_view);
	}
	});
ch.connect("bla");
</pre><br /><br />    利用上面的的两种方式接收消息时，会将接收到的消息从消息队列中删除，如果只是想了解一下下一条消息，而又不想将它从消息队列中删除时，可以使用peek()方法，它的使用方式同receive()。<br />    了解了如果发送和接收消息之后，现在Channel想转移到未连接状态啦，可以使用disconnect()，将Channel与组断开连接，这个时候如果再执行发送或接收消息的操作的话，那就等着接收异常吧，呵。<br />    Channel处于未连接状态之后，可以重新连接到组，也可以通过close()方法关闭Channel，需要注意的是，执行了close()之后，就不能直接执行connect()方法来使Channel连接到组了，需要使用open()来将Channel重新打开，之后再能与组进行连接。<br /><br />    上面只是对JGroups的简单应用做一下整理，其实这只是JGroups的皮毛而已，JGroups还包含很多内容：状态传递，Building Blocks(OSCache使用的就是Building Blocks里的NotificationBus)，还有协议栈等等好多内容，这些还得慢慢的继续学习啊。
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/81783#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 May 2007 11:29:29 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/81783</link>
        <guid>http://puras.javaeye.com/blog/81783</guid>
      </item>
      <item>
        <title>当爱已成往事...</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/23925" style="color:red;">http://puras.javaeye.com/blog/23925</a>&nbsp;
          发表时间: 2006年05月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一个美好的五一节.在大家都休息够了之后.我的感情也在此时也向我宣告罢工.<br />到此时.才发现原来自己在感情上是这么的脆弱, 经不起一点点的伤害.<br />不知道为什么会那么容易的陷入感情的漩涡, 又在不经意间, 丢掉了这份感情.<br />让我明白了, 原来爱情, 太过热情也是不好的, 呵呵, 会让人害怕, 当你失去这份热情的时候会是怎样.<br />自己是知道的, 要么就是不爱, 爱上就不会变, 可别人又如何能知道呢?<br />怀念她的一颦一笑, <br />怀念跟她讨论缘份, <br />怀念听她的笑声, <br />怀念听她诉苦, <br />怀念她的一切, <br /><br />现实是可悲的, 当两个人因为现实而要各奔东西的时候......人终究要面对现实的.<br /><br />常常说自己很现实, 现在想想, 原来那只是一种想法, 到了真正该面对现实的时候, 却要选择逃避.<br /><br />虽然爱已成往事, 但还是感谢上天, 给了我这个和她相遇的机会, <br />虽然时间不是很长, 但还是给我留下了一段美好的回忆.<br /><br />别了, 我的爱, 我只有把她放在心底最隐秘的地方.......<br />或许有一天, 我还会再和你相会, 只不过应该是在梦中.<br /><br />别了, 我的爱......<img src="/images/smiles/icon_cry.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/23925#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 10 May 2006 21:55:46 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/23925</link>
        <guid>http://puras.javaeye.com/blog/23925</guid>
      </item>
      <item>
        <title>JavaScript中一些简单的判断</title>
        <author>Puras</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://puras.javaeye.com">Puras</a>&nbsp;
          链接：<a href="http://puras.javaeye.com/blog/23659" style="color:red;">http://puras.javaeye.com/blog/23659</a>&nbsp;
          发表时间: 2005年12月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          [code:1]<br />//校验是否全由数字组成&#40;20位以内&#41;<br />function isNum&#40;str&#41;&#123;<br />	var patrn=/^&#91;0-9&#93;&#123;1,20&#125;$/;<br />	if &#40;patrn.exec&#40;str&#41;&#41; return true;<br /> 	return false;<br />&#125;<br /><br />//校验是否是正确的手机号<br />function isMobile&#40;str&#41;&#123;<br />	var patrn = /^&#40;&#40;\+86&#41;|&#40;86&#41;&#41;?&#40;13&#41;\d&#123;9&#125;$/;<br />	if&#40;patrn.exec&#40;str&#41;&#41; return true;<br />	return false;<br />&#125;<br /><br />//校验是否是正确的电话号<br />function isTel&#40;str&#41;&#123;<br />	var patrn = /^&#40;\d&#123;3,4&#125;\-&#41;?\d&#123;7,8&#125;$/;<br />	if&#40;patrn.exec&#40;str&#41;&#41; return true;<br />	return false;<br />&#125;<br /><br />//校验Email地址是否正确<br />function isEmail&#40;str&#41;&#123;<br />	var patrn = /^&#91;\w-&#93;+&#40;\.&#91;\w-&#93;+&#41;*@&#91;\w-&#93;+&#40;\.&#91;\w-&#93;+&#41;+$/;<br />	if&#40;patrn.exec&#40;str&#41;&#41; return true;<br />	return false;<br />&#125;<br />[/code:1]<br /><br />更新中...
          <br/>
          <span style="color:red;">
            <a href="http://puras.javaeye.com/blog/23659#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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 Dec 2005 22:25:09 +0800</pubDate>
        <link>http://puras.javaeye.com/blog/23659</link>
        <guid>http://puras.javaeye.com/blog/23659</guid>
      </item>
  </channel>
</rss>