<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>AJAX论坛最新讨论 - JavaEye</title>
    <description>JavaScript编程、XMLHTTP、AJAX开发、UI设计、Rich Client<br/>
圈子: 
<a href="http://flex2.group.javaeye.com/" target="_blank">Flex</a>
<a href="http://hzjavaeyer.group.javaeye.com/" target="_blank">JS研究</a>
<a href="http://css.group.javaeye.com/" target="_blank">CSS探讨</a>
<a href="http://ext.group.javaeye.com/" target="_blank">EXT</a>
<a href="http://gwts.group.javaeye.com/" target="_blank">GWT</a>
<a href="http://jsi.group.javaeye.com/" target="_blank">JSI</a> - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.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>Gwt-Ext学习笔记之基础篇</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://julycn.javaeye.com">julycn</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191634" style="color:red;">http://www.javaeye.com/topic/191634</a>&nbsp;
          发表时间: 2008年05月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>&nbsp;</p>
<p>&nbsp;</p>
<p class="MsoNormal" style="text-align: center;" align="center">Gwt-Ext<span style="font-family: 宋体;" lang="ZH-CN">学习笔记之基础篇</span>
</p>
<p class="MsoListParagraphCxSpFirst" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>一、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">安装</span>
Cypal Studio<span style="font-family: 宋体;" lang="ZH-CN">工具</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">下载</span>
Cypal
Studio <a href="http://code.google.com/p/cypal-studio/">http://code.google.com/p/cypal-studio/</a>
<span style="font-family: 宋体;" lang="ZH-CN">，解压后</span>
Copy<span style="font-family: 宋体;" lang="ZH-CN">到</span>
Eclipse<span style="font-family: 宋体;" lang="ZH-CN">目录下。</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">配置</span>
GWT Home<span style="font-family: 宋体;" lang="ZH-CN">目录，打开</span>
Eclipse<span style="font-family: 宋体;" lang="ZH-CN">的</span>
Window&mdash;Preferences&mdash;Cypal Studio <span style="font-family: 宋体;" lang="ZH-CN">选择</span>
Gwt<span style="font-family: 宋体;" lang="ZH-CN">的目录。</span>
<a href="../../../upload/picture/pic/14049/296c31b5-593d-32e9-abf8-17e131b0b78e.jpg"><span><!-- [if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
 o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
 stroked="f">
 <v:stroke joinstyle="miter"/>
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
  <v:f eqn="sum @0 1 0"/>
  <v:f eqn="sum 0 0 @1"/>
  <v:f eqn="prod @2 1 2"/>
  <v:f eqn="prod @3 21600 pixelWidth"/>
  <v:f eqn="prod @3 21600 pixelHeight"/>
  <v:f eqn="sum @0 0 1"/>
  <v:f eqn="prod @6 1 2"/>
  <v:f eqn="prod @7 21600 pixelWidth"/>
  <v:f eqn="sum @8 21600 0"/>
  <v:f eqn="prod @7 21600 pixelHeight"/>
  <v:f eqn="sum @10 21600 0"/>
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
 <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1031" type="#_x0000_t75" style='width:6in;
 height:376.5pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg"
  o:title="CC]M]A$){9J96N}HR4[~XUD"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14049/296c31b5-593d-32e9-abf8-17e131b0b78e.jpg" border="0" alt="" width="576" height="502" />
<!-- [endif]--></span>
</a>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;">&nbsp;</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>二、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">建立一个名为</span>
gwtext<span style="font-family: 宋体;" lang="ZH-CN">的</span>
GWT<span style="font-family: 宋体;" lang="ZH-CN">项目</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">新建一个动态</span>
web<span style="font-family: 宋体;" lang="ZH-CN">项目，</span>
File&mdash;New&mdash;Other&mdash;Web&mdash;Dynamic Web Project<span style="font-family: 宋体;" lang="ZH-CN">，在</span>
Configurations<span style="font-family: 宋体;" lang="ZH-CN">中选择</span>
Cypal Studio GWT Project<span style="font-family: 宋体;" lang="ZH-CN">，其他的默认即可。</span>
<span><!-- [if gte vml 1]><v:shape id="Picture_x0020_2"
 o:spid="_x0000_i1030" type="#_x0000_t75" style='width:6in;height:387.75pt;
 visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image003.jpg"
  o:title="D7V5Y}ICZDVT{5(U0(1}X40"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14047/20fcc65c-1d16-3906-8b8a-3085767964d5.jpg" border="0" alt="" width="576" height="517" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>三、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">创建</span>
Module<span style="font-family: 宋体;" lang="ZH-CN">模型</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]-->gwtext<span style="font-family: 宋体;" lang="ZH-CN">项目上点击右键</span>
New&mdash;Other&mdash;Cypal Studio&mdash;Module<span style="font-family: 宋体;" lang="ZH-CN">，输入包名</span>
org.gwtext.julycn,<span style="font-family: 宋体;" lang="ZH-CN">类名</span>
Register<span style="font-family: 宋体;" lang="ZH-CN">。</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在</span>
org.gwtext.julycn<span style="font-family: 宋体;" lang="ZH-CN">包下面生产</span>
client<span style="font-family: 宋体;" lang="ZH-CN">包、</span>
server<span style="font-family: 宋体;" lang="ZH-CN">包、</span>
public<span style="font-family: 宋体;" lang="ZH-CN">目录和</span>
Register.gwt.xml<span style="font-family: 宋体;" lang="ZH-CN">、</span>
Register.html<span style="font-family: 宋体;" lang="ZH-CN">；</span>
<span><!-- [if gte vml 1]><v:shape
 id="Picture_x0020_1" o:spid="_x0000_i1029" type="#_x0000_t75" style='width:200.25pt;
 height:189.75pt;visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image004.jpg"
  o:title="D7]`$E$}RDJJ_7RZ5D[MKQK"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14045/620468f6-787d-3869-9172-7f141866b38b.jpg" border="0" alt="" width="267" height="253" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>c.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在</span>
Register.java<span style="font-family: 宋体;" lang="ZH-CN">的</span>
<span style="color: red;">onModuleLoad()</span>
<span style="font-family: 宋体;" lang="ZH-CN">方法中加入</span>
<span style="color: red;">Window.alert(&quot;This is my first Gwt Demo!&quot;);</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */

public class Register implements EntryPoint {
	public void onModuleLoad() {
			Window.alert(&quot;This is my first Gwt Demo!&quot;);
		}
}
</pre>
&nbsp;
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"><span style="color: red;"></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>d.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">选择</span>
Run&mdash;Open Run
Dialog&mdash;Gwt Hosted Mode Application,<span style="font-family: 宋体;" lang="ZH-CN">选择</span>
New,<span style="font-family: 宋体;" lang="ZH-CN">新建一个运行实例</span>
gwtext,<span style="font-family: 宋体;" lang="ZH-CN">在</span>
Project<span style="font-family: 宋体;" lang="ZH-CN">中选择</span>
gwtext<span style="font-family: 宋体;" lang="ZH-CN">，</span>
Module<span style="font-family: 宋体;" lang="ZH-CN">会自动选择所要运行的模型类。</span>
<span><!-- [if gte vml 1]><v:shape id="Picture_x0020_3"
 o:spid="_x0000_i1028" type="#_x0000_t75" style='width:468.75pt;height:420pt;
 visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image006.jpg"
  o:title="VI8_ESE7QQ(`I_Q0%][0)}0"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14043/db172cf8-7464-3d5c-87f0-238f2be7bed3.jpg" border="0" alt="" width="625" height="560" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>e.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">点击运行，会弹出</span>
Google
Web Toolkit<span style="font-family: 宋体;" lang="ZH-CN">运行窗口。</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>四、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">配置</span>
GWT-Ext<span style="font-family: 宋体;" lang="ZH-CN">环境</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">下载</span>
<a href="http://gwt-ext.googlecode.com/files/gwtext-2.0.3.zip">gwt-ext</a>
<span style="font-family: 宋体;" lang="ZH-CN">和</span>
<a href="http://www.extjs.com/products/extjs/download.php?dl=extjs21">ext</a>
<span style="font-family: 宋体;" lang="ZH-CN">资源</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">加入</span>
gwtext<span style="font-family: 宋体;" lang="ZH-CN">的</span>
gwtext.jar<span style="font-family: 宋体;" lang="ZH-CN">和</span>
ext<span style="font-family: 宋体;" lang="ZH-CN">资源</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -1.5in;"><!-- [if !supportLists]--><span><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
i.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">把</span>
gwtext-2.0.3<span style="font-family: 宋体;" lang="ZH-CN">目录下的</span>
gwtext.jar<span style="font-family: 宋体;" lang="ZH-CN">加入到项目中。</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -1.5in;"><!-- [if !supportLists]--><span><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
ii.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在项目的</span>
public<span style="font-family: 宋体;" lang="ZH-CN">目录中新建</span>
js<span style="font-family: 宋体;" lang="ZH-CN">文件夹，然后把</span>
ext-2.1<span style="font-family: 宋体;" lang="ZH-CN">目录下的</span>
adapter<span style="font-family: 宋体;" lang="ZH-CN">目录、</span>
resources<span style="font-family: 宋体;" lang="ZH-CN">目录和</span>
ext-all.js<span style="font-family: 宋体;" lang="ZH-CN">、</span>
ext-core.js<span style="font-family: 宋体;" lang="ZH-CN">导入到</span>
js<span style="font-family: 宋体;" lang="ZH-CN">文件夹下。</span>
<span><!-- [if gte vml 1]><v:shape id="Picture_x0020_4" o:spid="_x0000_i1027"
 type="#_x0000_t75" style='width:274.5pt;height:293.25pt;visibility:visible;
 mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image007.jpg"
  o:title="VI8_ESE7QQ(`I_Q0%][0)}0"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14041/fa33c12e-9fe4-3e9d-9324-e7ffec1b6549.jpg" border="0" alt="" width="366" height="391" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>c.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">修改</span>
HTML<span style="font-family: 宋体;" lang="ZH-CN">宿主页面</span>
Register.html<span style="font-family: 宋体;" lang="ZH-CN">和模块配置文件</span>
Register.gwt.xml</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -1.5in;"><!-- [if !supportLists]--><span><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
i.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在</span>
Register.html<span style="font-family: 宋体;" lang="ZH-CN">文件中加入</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">&lt;link href=&quot;js/resources/css/ext-all.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;/&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;js/adapter/ext/ext-base.js&quot;&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;js/ext-all.js&quot;&gt;&lt;/script&gt;
</pre>
&nbsp;
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1.5in; text-indent: -1.5in;"><!-- [if !supportLists]--><span><span><span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
ii.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在</span>
Register.gwt.xml<span style="font-family: 宋体;" lang="ZH-CN">文件中加入</span>
</p>
<pre name="code" class="java">&lt;inherits name=&quot;com.gwtext.GwtExt&quot;/&gt;</pre>
&nbsp;
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>五、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">运行</span>
GWT-Ext<span style="font-family: 宋体;" lang="ZH-CN">实例</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">修改</span>
Register.java<span style="font-family: 宋体;" lang="ZH-CN">模型文件</span>
,<span style="font-family: 宋体;" lang="ZH-CN">内容如下：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */
public class Register implements EntryPoint{
	public void onModuleLoad() {
		createComponents();
	}

	private void createComponents() {
		final FormPanel frm = new FormPanel();
		frm.setDraggable(true);
		frm.setWidth(300);
		frm.setTitle(&quot;用户注册&quot;);
		frm.setPaddings(25);

		TextField txtUsername = new TextField(&quot;用户名&quot;, &quot;username&quot;);
		TextField txtPassword = new TextField(&quot;密码&quot;, &quot;password&quot;);
		TextField txtEmail = new TextField(&quot;邮箱&quot;, &quot;email&quot;);
		TextField txtPhone = new TextField(&quot;电话&quot;, &quot;phone&quot;);

		txtUsername.setRegex(&quot;^[a-zA-Z]*$&quot;);
		txtUsername.setRegexText(&quot;用户名必须为字母！&quot;);
		txtUsername.setAllowBlank(false);

		txtPassword.setPassword(true);
		txtPassword.setRegex(&quot;^[a-zA-Z]*$&quot;);
		txtPassword.setRegexText(&quot;密码必须为字母！&quot;);
		txtPassword.setAllowBlank(false);

		txtEmail.setVtype(VType.EMAIL);
		txtEmail.setVtypeText(&quot;请输入合法的邮箱地址！&quot;);
		txtEmail.setAllowBlank(false);

		txtPhone.setRegex(&quot;^\\d*$&quot;);
		txtPhone.setRegexText(&quot;电话必须为数字！&quot;);
		txtPhone.setAllowBlank(false);

		frm.add(txtUsername);
		frm.add(txtPassword);
		frm.add(txtEmail);
		frm.add(txtPhone);

		Panel buttonPanel = new Panel();
		buttonPanel.setLayout(new HorizontalLayout(10));

		
		Button btnSave = new Button(&quot;保存&quot;);
		btnSave.addListener(new ButtonListenerAdapter() {
			public void onClick(Button button, EventObject e) {
				if (frm.getForm().isValid()) {
					MessageBox.alert(&quot;成功&quot;,&quot;信息提交成功！&quot;);
				} else {
					MessageBox.alert(&quot;错误&quot;,&quot;请验证输入的信息是否正确！&quot;);
				}
			}
		});

		Button btnClear = new Button(&quot;取消&quot;);
		btnClear.addListener(new ButtonListenerAdapter() {
			public void onClick(Button button, EventObject e) {
				MessageBox.alert(&quot;取消&quot;, &quot;注册信息保存失败！&quot;);
			}
		});

		buttonPanel.add(btnSave);
		buttonPanel.add(btnClear);

		frm.add(buttonPanel);

		RootPanel.get().add(frm);
	}
}
</pre>
&nbsp;
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"><span style="color: red;"></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">运行效果；点击如下按钮，查看效果</span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"><span><!-- [if gte vml 1]><v:shape id="Picture_x0020_5"
 o:spid="_x0000_i1026" type="#_x0000_t75" style='width:267pt;height:204pt;
 visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image009.jpg"
  o:title="@U]~I]}8C)~78LQR@T3FIP9"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14053/76658f2a-2ac2-32e6-8be1-3bbc19ed2043.jpg" border="0" alt="" width="356" height="272" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;"><span><!-- [if gte vml 1]><v:shape id="Picture_x0020_6"
 o:spid="_x0000_i1025" type="#_x0000_t75" style='width:310.5pt;height:316.5pt;
 visibility:visible;mso-wrap-style:square'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image010.jpg"
  o:title="VI8_ESE7QQ(`I_Q0%][0)}0"/>
</v:shape><![endif]--><!-- [if !vml]--><img style="border: 0;" src="../../../upload/picture/pic/14051/36f13e16-88bb-3999-987a-54e5ad36ddd5.jpg" border="0" alt="" width="414" height="422" />
<!-- [endif]--></span>
</p>
<p class="MsoListParagraphCxSpMiddle" style="margin-left: 1in;">&nbsp;</p>
<p class="MsoListParagraphCxSpLast" style="margin-left: 1in;"><span style="font-family: 宋体; color: red;" lang="ZH-CN">备注：本文只是一个简单的</span>
<span style="color: red;">Demo</span>
<span style="font-family: 宋体; color: red;" lang="ZH-CN">，如果有问题，请跟帖。想要更多的人帮助你，请先帮助更多的人</span>
<span style="color: red;"></span>
</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191634#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 May 2008 01:25:07 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191634</link>
        <guid>http://www.javaeye.com/topic/191634</guid>
      </item>
          <item>
        <title>测试一下你属于哪种人</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hax.javaeye.com">hax</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191839" style="color:red;">http://www.javaeye.com/topic/191839</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          抄自<a href="http://www.terrainformatica.com/index.php/?p=32" target="_blank">http://www.terrainformatica.com/index.php/?p=32</a><br /><br /><br /><br />What will following JavaScript function return?<br /><br />function test()<br />  {<br />    try<br />    {<br />      return "I am optimist";<br />    }<br />    finally<br />    {<br />      return "I am pessimist";<br />    }<br />  }<br /><br />Try to answer as this is a good chance to measure your attitude<img src="/images/smiles/icon_smile.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191839#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sun, 11 May 2008 04:20:48 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191839</link>
        <guid>http://www.javaeye.com/topic/191839</guid>
      </item>
          <item>
        <title>struts2中的ajax运用</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://icanfly.javaeye.com">icanfly</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191796" style="color:red;">http://www.javaeye.com/topic/191796</a>&nbsp;
          发表时间: 2008年05月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>最近从书店买了本struts2的书在看，顺便试验了一下书中的AJAX部分。</p>
<p>由于本人是初学编程，而且又是第一次发贴，所以如果有什么不对的地方还请大家批评指正。</p>
<p><span style="font-size: x-small;"><span style="color: #c60a00;">Struts2 Ajax</span>的输入校验不是客户端校验,而是服务器端校验,Struts 2中集成的是时下Java EE平台中比较流行的ajax框架&mdash;&mdash;Dojo和DWR。</span></p>
<p><span style="font-size: x-small;">在开始前先导入struts2的JAR包到WEB-INF/lib目录下。</span></p>
<p><span style="font-size: x-small;">要使用DWR，则要在WEB-INF下生成一个dwr.xml文件内容如下：</span></p>
<p><span style="font-size: x-small;">dwr.xml:</span></p>
<pre name="code" class="xml">&lt;!DOCTYPE dwr PUBLIC 
	"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN" 
	"http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt;

&lt;dwr&gt;
    &lt;allow&gt;
        &lt;create creator="new" javascript="validator"&gt;
            &lt;param name="class" value="org.apache.struts2.validators.DWRValidator"/&gt;
        &lt;/create&gt;
        &lt;convert converter="bean" match="com.opensymphony.xwork2.ValidationAwareSupport"/&gt;
    &lt;/allow&gt;

    &lt;signatures&gt;
        &lt;![CDATA[
        import java.util.Map;
        import org.apache.struts2.validators.DWRValidator;

        DWRValidator.doPost(String, String, Map&lt;String, String&gt;);
        ]]&gt;
    &lt;/signatures&gt;
&lt;/dwr&gt;</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;这个文件是不用修改的直接COPY过来即可。在上面配置文件中，将org.apache.struts2.validators.DWRValidator类创建成一个JavaScript对象，这个对象名为validator。当然，这里所说的创建是假创建，因为Java类是无法创建JavaScript对象，但DWR提供一种方式，允许当我们在客户端调用validator的方法时，转换成调用DWRValidator实例的方法。值得指出的是，为了让Web应用增加DWR支持，显然还需要将DWR的二进制包复制到Web应用中。即使对于Struts2.0.6正式版，依然不支持DWR的的最新版本（DWR的最新版本是2.0.1），因此只能使用DWR的前一个正式版1.1.3，将dwr-1.1.3.jar文件复制到Web应用中的lib目录下即可。</p>
<p>然后修改web.xml文件：</p>
<p>web.xml:</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="GBK"?&gt;
&lt;web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"&gt;

	&lt;servlet&gt;

		&lt;servlet-name&gt;dwr&lt;/servlet-name&gt;
		&lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;
		&lt;init-param&gt;
			&lt;param-name&gt;debug&lt;/param-name&gt;
			&lt;param-value&gt;true&lt;/param-value&gt;
		&lt;/init-param&gt;
	&lt;/servlet&gt;

	&lt;servlet-mapping&gt;
		&lt;servlet-name&gt;dwr&lt;/servlet-name&gt;
		&lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;
	&lt;/servlet-mapping&gt;



	&lt;!-- 定义Struts2的FilterDispathcer的Filter --&gt;
	&lt;filter&gt;
		&lt;filter-name&gt;struts2&lt;/filter-name&gt;
		&lt;filter-class&gt;
			org.apache.struts2.dispatcher.FilterDispatcher
		&lt;/filter-class&gt;
	&lt;/filter&gt;

	&lt;!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 --&gt;
	&lt;filter-mapping&gt;
		&lt;filter-name&gt;struts2&lt;/filter-name&gt;
		&lt;url-pattern&gt;/*&lt;/url-pattern&gt;
	&lt;/filter-mapping&gt;

&lt;/web-app&gt;
</pre>
<p>&nbsp;&nbsp;</p>
<p>&nbsp;接下来写一个JSP页面：</p>
<p>register.jsp:</p>
<pre name="code" class="html">&lt;%@ page contentType="text/html;charset=GBK" language="java"%&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;远程ajax表单&lt;/title&gt;
		&lt;s:head theme="ajax" /&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;s:div id="mydiv"&gt;&lt;/s:div&gt;
		&lt;s:div&gt;
			&lt;s:form id="theForm2" action="AjaxTest" method="post" theme="ajax"
				validate="true"&gt;
				&lt;s:textfield name="name" label="请输入你的用户名" /&gt;
				&lt;s:password name="pass" label="请输入你的密码" /&gt;
				&lt;s:submit value="登录" targets="mydiv" loadingText="请稍后..." /&gt;
			&lt;/s:form&gt;
		&lt;/s:div&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>&nbsp;&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;其中一定在在&lt;head&gt;&lt;/head&gt;之间加入<span style="color: #008000;">&lt;s:head theme="ajax" /&gt;</span><span style="color: #000000;">这句话，然后在后面的form中也要将theme设置成ajax，validate设为true,这样struts2就会自动地将form表单内的各个域设成validate为true.validate=true即表明要进行ajax检验。</span></p>
<p>&nbsp;<span style="color: #000000;">下面再写一个AJAX响应JSP页面片断：</span></p>
<p><span style="color: #000000;">AjaxResult.jsp:</span></p>
<pre name="code" class="html">&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
&lt;%
    request.setAttribute("decorator", "none");
    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%&gt;
你的姓名是:&lt;s:property value="name"/&gt;&lt;br&gt;
你的密码是:&lt;s:property value="pass"/&gt;
</pre>
<p>&nbsp;</p>
<p><span style="color: #000000;">下一步要做的就是编写Action类： </span></p>
<p><span style="color: #000000;">AjaxTestAction.java:</span></p>
<pre name="code" class="java">package test;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

import java.io.Serializable;

@SuppressWarnings("serial")
public class AjaxTestAction  implements Action, Serializable
{
	private String name;
	private String pass;

	public String getPass()
	{
		return pass;
	}

	public void setPass(String pass)
	{
		this.pass = pass;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String execute() throws Exception
	{
		return SUCCESS;
	}

}
</pre>
<p>&nbsp;&nbsp;</p>
<p><span style="color: #000000;">
<p>&nbsp;接下来是编写验证文件，<span style="color: #ff0000;">在进行struts2 ajax验证是推荐使用校验规则文件来进行，尽量不要使用&ldquo;重写Action类的validate方法</span><span style="color: #ff0000;">，重写该方法来完成ajax校验可能会出现一些未知的异常！</span><span style="color: #000000;">校验规则文件如下：</span>&nbsp;</p>
<p>AjaxTestAction-validation.xml:</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="GBK"?&gt;
&lt;!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.2//EN"
	"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd"&gt;

&lt;validators&gt;
	&lt;field name="name"&gt;
		&lt;field-validator type="requiredstring"&gt;
			&lt;param name="trim"&gt;true&lt;/param&gt;
			&lt;message&gt;必须输入名字&lt;/message&gt;
		&lt;/field-validator&gt;
		&lt;field-validator type="regex"&gt;
			&lt;param name="expression"&gt;&lt;![CDATA[(\w{4,25})]]&gt;&lt;/param&gt;
			&lt;message&gt;您输入的用户名只能是长度在4到25之间的字母或数字&lt;/message&gt;
		&lt;/field-validator&gt;
	&lt;/field&gt;
	&lt;field name="pass"&gt;
		&lt;field-validator type="requiredstring"&gt;
			&lt;param name="trim"&gt;true&lt;/param&gt;
			&lt;message&gt;必须输入密码&lt;/message&gt;
		&lt;/field-validator&gt;
		&lt;field-validator type="regex"&gt;
			&lt;param name="expression"&gt;&lt;![CDATA[(\w{4,25})]]&gt;&lt;/param&gt;
			&lt;message&gt;您输入的密码只能是长度在4到25之间的字母或数字&lt;/message&gt;
		&lt;/field-validator&gt;
	&lt;/field&gt;
&lt;/validators&gt;</pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>最后一步啦！修改struts2 Action配置文件：</p>
<p>struts.xml:&nbsp;</p>
<pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8" ?&gt;
&lt;!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"&gt;
&lt;struts&gt;
	&lt;package name="ajax" extends="struts-default"&gt;
		&lt;action name="AjaxTest" class="test.AjaxTestAction"&gt;
			&lt;result name="success"&gt;/AjaxResult.jsp&lt;/result&gt;
			&lt;result name="input"&gt;/register.jsp&lt;/result&gt;
		&lt;/action&gt;
	&lt;/package&gt;
&lt;/struts&gt;
</pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;一切准备就绪，启动服务器，在地址栏中输入以下地址：<a href="http://localhost:8080/Test/register.jsp"><span style="color: #993366;">http://localhost:8080/Test/register.jsp</span></a>就可以看到登录界面，在用户名和密码框中如果你输入的信息不正确，那么在该组件失去焦点后，ajax组件就会将用户名和密码框的值传到服务器进行校验，然后将校验结果返回客户端从而达到很好的用户体验。</p>
<p>最后想要说明一点是：<span style="color: #993366;">在struts2以前版本中对DWR有一些BUG，不过好像在最新的struts 2.0.11.1中已经解决，建议大家将struts2升级至最新版本。</span></p>
<p><span style="color: #000000;">还有一个我在练习中犯的一个错误，就是当我想用AjaxResult.jsp返回内容填充我原来的theForm2时，theForm2的内容会被刷掉，也就是不能引用原来theForm2内容的组件。这时如果在AjaxResult.jsp中使用&lt;s:property value="name"/&gt;时会出现问题。不知道我分析的对不对！如有错误还请批评指正。文件内容如下：</span></p>
<p><span style="color: #000000;">register.jsp:</span>&nbsp;</p>
<pre name="code" class="html">&lt;%@ page contentType="text/html;charset=GBK" language="java"%&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags"%&gt;
&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;远程ajax表单&lt;/title&gt;
		&lt;s:head theme="ajax" /&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;s:div id="mydiv"&gt;&lt;/s:div&gt;
		&lt;s:div&gt;
			&lt;s:form id="theForm2" action="AjaxTest" method="post" theme="ajax"
				validate="true"&gt;
				&lt;s:textfield name="name" label="请输入你的用户名" /&gt;
				&lt;s:password name="pass" label="请输入你的密码" /&gt;
				&lt;s:submit value="登录" targets="theForm2" loadingText="请稍后..." /&gt;
			&lt;/s:form&gt;
		&lt;/s:div&gt;
	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>&nbsp;&nbsp;&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;AjaxResult.jsp:</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre name="code" class="html">&lt;%@ page contentType="text/html;charset=GBK" language="java" %&gt;
&lt;%@ taglib prefix="s" uri="/struts-tags" %&gt;
&lt;%
    request.setAttribute("decorator", "none");
    response.setHeader("Cache-Control","no-cache"); //HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%&gt;
你的姓名是:&lt;s:property value="name"/&gt;&lt;br&gt;
你的密码是:&lt;s:property value="pass"/&gt;
</pre>
<font style="FONT-FAMILY: " color="#000000">
<p>&nbsp;&nbsp;&nbsp;<span style="color: #000000;">&nbsp;我在使用这个编辑器编辑这篇文章时不知道为什么有些符号或字母显示不正常了，弄了好半天了，大家也就凑合着看吧，呵呵！<span style="color: #000000;"><span style="color: #000000;"><span style="color: #000000;">总的说来在struts2中使用ajax是非常方便，而且依靠DWR和DOJO这两个强大的AJAX框架，struts2 的ajax运用也会相当出色。随着struts渐渐淡出历史舞台，我想struts的王储－－－－struts2正在异军突起，彰显魅力！</span></span></span></span></p>
</font></span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191796#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 10 May 2008 22:06:36 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191796</link>
        <guid>http://www.javaeye.com/topic/191796</guid>
      </item>
          <item>
        <title>给我一个不用Flex的理由</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tigershuang.javaeye.com">tigershuang</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190602" style="color:red;">http://www.javaeye.com/topic/190602</a>&nbsp;
          发表时间: 2008年05月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          在B/S结构的系统中需要实现类似“股票K线分析图”的功能。正在为选择哪种技术发愁。<br /><br />     这两天看了些文章，在javaeye上也看到了不少关于UI技术的讨论，感觉不好定夺，稍微看好Flex。<br /><br />由于这个功能设计图形比较复杂，通常说的dojo或者extjs之类的就不予考虑了，主要列出了以下几个备选技术：<br /><ul><li>Flex</li><li>Applet</li><li>Silverlight</li></ul><br /><br />（如果各位达人还有更好的方案请不吝指教）<br /><br />    这几项技术里面，除了Applet有过开发经验外，其余两个都不是很熟悉，只在大学时代捣鼓过一阵子Flash（对actionScript也不算熟悉，当然Flex与Flash还是有很大区别的）。而Silverlight则更是一窍不通，今天才知道这个微软大叔的产品。<br /><br />    之所以觉得Flex更适合我的系统乃是基于以下几个因素：<br /><br /><strong>客户端支持</strong><br /><br />    大家都知道要使用applet必须先安装一个安装文件相对较大的JRE，而事实上很少有用户愿意安装这个玩意；<br />    而Flash就不一样了，据说世界上有94%的PC机都安装了flash客户端，这样由Flex编译成的swf文件就可以畅通无阻得在绝大部分机器上运行了。<br /><br /><strong>产品忠诚度</strong><br />    虽然有过Applet的开发经验，我本人也一直在做java平台的开发，却从没接触过java的swing或则SWT，对java的UI开发一直敬而远之。但flash就不同了，记得上大学那时，最喜欢逛的就是闪客帝国、闪吧等flash网站，用flash做的游戏、Music MV现在还记忆犹新。自己也研究了一段时间的flash，还在一个中专学校里教授flash课程。当然Flash毕竟是做多媒体的设计软件，跟开发人员还是挨不上边，但Flex就不同了，通过这几天对Flex的了解（比如这个：http://dongxm.javaeye.com/blog/163524）觉得之前心存的两个疑窦：<br />与服务器端的交互<br />与HTML页面的交互<br />都一一解开了。<br /><br /><br />    当然软件项目的失败的一个重要原因就是采用不熟悉的技术，不过，既然可供选择的三个技术都是不熟悉的，只有“三害相权取其轻”了。学习成本高就在项目开发周期中多安排时间集体学习了。<br /><br />    以上是鄙人愚见，各位达人还有什么更好的技术推荐给小弟的吗？
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190602#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Wed, 07 May 2008 14:47:20 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190602</link>
        <guid>http://www.javaeye.com/topic/190602</guid>
      </item>
          <item>
        <title>我使用前台模板+AJAX的样例站</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://achun.javaeye.com">achun</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192459" style="color:red;">http://www.javaeye.com/topic/192459</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p><a href="http://www.91mh.net/index.html" target="_blank">http://www.91mh.net/index.html</a></p>
<p>这是我们小组3个人前台:使用javascript 模板,后台输出JSON的第二个站,</p>
<p>第一个站的方案紧紧是实验品,所以不提了.</p>
<p>这个可以称之为尝试了.</p>
<p>采用前台模板后的结果就是后台超级的简单.由于javascript语法的强大方便,前台处理表现效率更高.</p>
<p>下面就是<strong>您看到的内容</strong><strong>的全部后台数据输出代码</strong>,当然入口程序,数据库操作的封装类,JSON输出类等属于库级别的就不发了.</p>
<p>代码是php写的,可惜JE不支持php的高亮语法.</p>
<p>补充:关于搜索引擎支持的问题,见后面的帖子,91mh已经实施了我提出的方案.效果如何等等看吧!</p>
<pre name="code" class="cpp">$json=array();//输出JSON变量
switch ($Q['Q']){//$Q就是前台传递过来的所有参数合并
case 'loadbody':
	$gif='/style/imgs/logo.gif';//这个是logo的替换,是我们的业务逻辑要求的
	$json['URL']=$SITE['webroot'].'/index.html';//告诉前台取哪一个模板,$SITE是全局的站点目录对应变量
	$json['uinfo']=false;
	$json['logo']=$gif;
	$json['gonggao']='内部测试中.......FireFox下将获得最佳浏览效果.';
	//下面是取一些热点信息
	$sql="SELECT id,n_name,fenlei FROM flash ORDER BY mouse DESC limit 5";
	$DB-&gt;query($sql,$json['gx']);
	$sql="SELECT id,n_name,fenlei FROM news ORDER BY mouse DESC limit 5";
	$DB-&gt;query($sql,$json['gx']);
	//用户信息,从SESSION中取
	$json['uinfo']=$SESSION['uinfo'];
	$json['rd']=$json['gx'];
	$json['tb']=$json['gx'];
	$json['gg'][0]=array('title'=&gt;'44','url'=&gt;'#','image'=&gt;'/style/imgs/loading.gif');
	$json['yq'][0]=array('title'=&gt;'44','url'=&gt;'#','image'=&gt;'/style/imgs/loading.gif');
	break;
case 'xwnr'://新闻具体内容,根据变量的不同取不同的表里的数据,其实新闻这个词不合适,因为我们合并了新闻,文章,帖子等
	$fenlei=$F['fenlei'];
	$table=array(1=&gt;'news',14=&gt;'data_is',32=&gt;'flash');
	$fields=array(
		'1'=&gt;'id,n_name,laiyuan,nicheng,n_time,neirong',
		'14'=&gt;'id,d_id,file,z_num,z_name,fenlei',
		'32'=&gt;'id,n_name,fenlei,nicheng,uptime,u_id,jieshao,fileurl'
	);
	if($FENLEI[$fenlei]['toup'])
		$toup=$FENLEI[$fenlei]['toup'];
	else
		$toup=$fenlei;
	$table=$table[$toup];
	$fields=$fields[$toup];
	$id=$Q['id']+0;
	$where="WHERE id=$id";
	$sql="SELECT $fields FROM $table $where limit 1";
	if($DB-&gt;query($sql,$json,true)){
		$DB-&gt;click($table,$where);//计数器
		if ($table=='news'){//新闻分页,有些新闻是由分页信息的,好多站都有这个功能,可惜JE没有这个功能
			$json['page']=$DB-&gt;count('news_data',"WHERE news_id=$id");
		}
	}
	break;
case 'newspage'://提取分页新闻分页
	$news_id=$Q['id']+0;
	$page=$Q['PAGE']+0;
	$sql="SELECT neirong FROM news_data WHERE news_id=$news_id order by id limit $page,1";
	$DB-&gt;query($sql,$json,true);
	break;
case 'ftfs'://漫画浏览,由于我们的漫画是打过包(ftfs包,自己定义的格式,所以要特殊处理)
	$id=$F['id'];
	$sql="SELECT id,d_id,z_name,z_num,fenlei,file FROM data_is WHERE id=$id";
	$DB-&gt;query($sql,$json,true);
	break;
case 'mhxx'://漫画信息
	$id=$F['id']+0;
	$json['d_id']=$id;
	$json['fenlei']=$F['fenlei']+0;
	$sql="SELECT id,n_name,fenlei,uptime,gengxin,zuozhe,dir,jieshao,zt FROM data WHERE id=$id limit 1";
	$DB-&gt;query($sql,$json['data'],true);
	$sql="SELECT id,d_id,z_name,fenlei,file FROM data_is WHERE d_id=$id order by id desc";
	if($DB-&gt;query($sql,$json['liebiao']))
		$DB-&gt;click('data',"WHERE id=$id");
	break;
case 'dmxw'://新闻列表,根据变量的不同取不同的表里的数据,其实新闻这个词不合适,因为我们合并了新闻,文章,帖子等
	$Q['Page']=$Q['Page']+0;
	$fenlei=$F['fenlei']+0;
	if($FENLEI[$fenlei]['toup'])
		$toup=$FENLEI[$fenlei]['toup'];
	else
		$toup=$fenlei;
	$table=array(1=&gt;'news',14=&gt;'data',32=&gt;'flash');
	$fields=array(
		1=&gt;'id,n_name,fenlei,nicheng,n_time,u_id',
		14=&gt;'id,n_name,fenlei,uptime,gengxin,dir,zt',
		32=&gt;'id,n_name,fenlei,nicheng,uptime,u_id,fileurl'
	);
	$table=$table[$toup];
	$fields=$fields[$toup];
	if($FENLEI[$fenlei]['toup'])
		$where="WHERE fenlei=$fenlei";
	else
		$where='';
	if ($table=='data' and $F['abc']){//漫画字母索引搜索的特殊处理
		$abc=$DB-&gt;escape($F['abc']);
		if($where)
			$where+=" and abc=$abc";
		else
			$where="WHERE abc=$abc";
	}
	if (!$Q['CNT']) {
		$Q['CNT']=$DB-&gt;count($table,$where);
	}
	$json['lbpage']=array();//列表分页信息处理
	$json['lbpage']['rows']=10;
	$json['lbpage']['urlpar']="Q=$Q[Q]&amp;fenlei=$fenlei";
	$json['lbpage']['cnt']=$Q['CNT'];
	$json['lbpage']['pages']=9;
	$json['lbpage']['no'] = $Q['Page'];
	$limit = pagelimit($json['lbpage']['rows'],$Q['CNT'],$Q['Page']);
	$sql="SELECT $fields FROM $table $where ORDER BY id DESC $limit";
	$json['title']=$FENLEI[$fenlei]['f_name'];
	$DB-&gt;query($sql,$json['liebiao']);
	break;
}
$E-&gt;pushJSON($json);//用共用库输出JSON数据</pre>
<p>&nbsp;后话.</p>
<p>这个站我们是从零开始建设的,3个人用了30个工作日.分工是:</p>
<p>1个策划:规划站点的业务逻辑和内容,建立数据库,小偷</p>
<p>1个页面:css,html.还有这个同事不是全职的,这1个月她工作的时间满算也就只有10天</p>
<p>我:负责其他工作,因为是我们原发的技术方案,所以很多东西要重头写,</p>
<p>可笑的是我有10天都完全被所见即所得的问题缠绕,</p>
<p>其中2天的选型,选择了wymeditor,化了4天改造他符合我们的技术逻辑.</p>
<p>就发现了nicEditor,发现nE更适合,就有化了4天学习扩充(这个谈不上改造,因为她的技术和我们的可以完美结合)符合我们的技术逻辑.到现在基本完成.</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192459#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 09:11:55 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192459</link>
        <guid>http://www.javaeye.com/topic/192459</guid>
      </item>
          <item>
        <title>关于左侧树状菜单打开界面的目标区域定位问题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://janer.javaeye.com">JaNer</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192624" style="color:red;">http://www.javaeye.com/topic/192624</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          这几天刚开始搞EXT,问题重重，举步维艰，求教个问题，先谢谢了。<br />问题是这样的:<br />我把首页分成了上，下，左，右四个div区域,并在我的左Div里放了一颗树,不是EXT原装树。我想当我点击这棵树的菜单的时候，相应的界面能在我的右div里显示出来.我点击树菜单触发的js如下:<br />function doAction(url){<br />  parent.mainFrame.location.href = url;<br /> }<br />这是以前frameset的写法～ 不知道现在应怎么改一下？<br /><br />我的页面代码如下:<br /><pre name="code" class="java">
&lt;%@ page contentType="text/html; charset=GBK"%>
&lt;%@ include file="/common/include/taglib.jsp"%>
&lt;%@ include file="/common/include/cssjs.jsp"%>
&lt;%@ include file="/common/include/extcssjs.jsp"%>
&lt;html>
&lt;head>
&lt;title>Red门户网站通用平台 V 0.1&lt;/title>
&lt;script type="text/javascript">
function doAction(url){
  parent.mainFrame.location.href = url;
 }
 
Ext.onReady(function(){
      new Ext.Viewport({
             layout:'border',
             items:[
                    new Ext.BoxComponent({
                         region:'north',
                         el: 'north',//填充指定id的区域内容到north区域，若不设该属性，请通过html:'内容'，设置区域内容
                         height:35
                   }),new Ext.BoxComponent({
                         region:'south',
                         el: 'south',
                         height:0
                   }),{
                        region:'center',
                        title:'业务办理',
                        contentEl:'center'
                   },{
                       region:'west',
                       width: 200,
                       collapsible: true,
                       minSize: 100,
                       maxSize: 300,
                       split: true,
                       title: 'eRed门户网站通用平台 V 0.1',
                       contentEl: 'tree'
                   }]
            });
       });
&lt;/script>
&lt;body>
&lt;html:form action="/security.go" method="post">
&lt;div id="north">
顶部
&lt;/div>
&lt;div id="south"> 

&lt;/div>
&lt;div id="center"> 
业务区域
&lt;/div>
${treeScript}
&lt;/html:form>
&lt;/body>
&lt;/html>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192624#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Tue, 13 May 2008 15:57:06 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192624</link>
        <guid>http://www.javaeye.com/topic/192624</guid>
      </item>
          <item>
        <title>如何找出javascript页面中性能瓶颈？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://dexterivivi.javaeye.com">dexterivivi</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192210" style="color:red;">http://www.javaeye.com/topic/192210</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp; 我们的网站是一个基于prototype.js ,scriptaculous.开发的社交型网站。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; 里面大量使用scriptaculous 的很酷的效果。
   我们的网站在首次打开之后，会再调用ajax访问服务器读一些东西下来，再对这些信息进行初始化（相信这种做法在现在web2.0网站里很常用）。 由于初始化要处理的javascript动作很多， 所以网页真正加载完是需要的时间比较长， 这在用户体验上肯定是不好的。 我想请问，我应该如何做才能把js的性能瓶颈找出来呢？ 感谢每一个回答者！</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192210#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 12 May 2008 13:42:00 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192210</link>
        <guid>http://www.javaeye.com/topic/192210</guid>
      </item>
          <item>
        <title>下拉框关联显示问题解决方案</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sfjsffjjj.javaeye.com">sfjsffjjj</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192571" style="color:red;">http://www.javaeye.com/topic/192571</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          采用chain模式，可任意扩展关联个数。<br /><strong>index.jsp</strong><br /><br />&lt;%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><br />&lt;%<br />String path = request.getContextPath();<br />String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<br />%><br /><br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br />&lt;html><br />  &lt;head><br />    &lt;base href="&lt;%=basePath%>"><br />    <br />    &lt;title>My JSP 'index.jsp' starting page&lt;/title><br />	&lt;script language="javascript" src="&lt;%=request.getContextPath()%>/rela.js">&lt;/script><br />    <br />	&lt;meta http-equiv="pragma" content="no-cache"><br />	&lt;meta http-equiv="cache-control" content="no-cache"><br />	&lt;meta http-equiv="expires" content="0">    <br />	&lt;meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br />	&lt;meta http-equiv="description" content="This is my page"><br />	&lt;!--<br />	&lt;link rel="stylesheet" type="text/css" href="styles.css"><br />	-->&lt;!--<br />	&lt;script language="javascript" src="&lt;%=request.getContextPath()%>/rela.js">&lt;/script><br />    -->&lt;/head><br />  <br /><strong>  &lt;script type="text/javascript"><br />  		function init(){<br />  			var province=document.getElementById("province");<br />  			var city=document.getElementById("city");<br />  			var area=document.getElementById("area");<br />  			var pro1="01,02";<br />  			var pro2="01:北京,02:河北";<br />  			var city1="0101,0201,0202";<br />  			var city2="0101:北京,0201:石家庄,0202:保定";<br />  			var area1="010101,010102,010103,020101,020102,020201,020202,020203";<br />  			var area2="010101:海淀区,010102:朝阳区,010103:西城区,020101:正定,020102:晋州,020201:冀州,020202:枣强,020203:饶阳";<br />  			proControl(province,city,area,pro1,pro2,city1,city2,area1,area2);<br />  		}<br />  &lt;/script></strong><br />  <br />  &lt;body onload="init()"><br />    省份:&lt;select id="province"><br />    		&lt;option value="01">北京&lt;/option><br />    		&lt;option value="02">河北&lt;/option><br />        &lt;/select><br />    &nbsp;<br />    城市:&lt;select id="city"><br />    		&lt;option value="0101">北京&lt;/option><br />        &lt;/select><br />    &nbsp;<br />    地区:&lt;select id="area"><br />    		&lt;option value="010101">海淀区&lt;/option><br />    		&lt;option value="010102">朝阳区&lt;/option><br />    		&lt;option value="010103">西城区&lt;/option><br />        &lt;/select><br />  &lt;/body><br />&lt;/html><br /><br /><strong>rela.js</strong><br /><br />//class RelaChange<br />function RelaChange(next,relaList,codeDescList,select){<br />	if (select==null) return ; //exception exit<br />    this.select=select;<br />    this.select.owner=this;<br />    this.select.onchange=function(){<br />    	if (this.owner.next!=null)<br />    		this.owner.next.change(this.value);<br />    };<br />	this.next=next;<br />    this.relaList=relaList;<br />    this.codeDescList=codeDescList;<br />}<br />RelaChange.prototype.change=function(parentKey){<br />		//alert("parentKey:"+parentKey);<br />		var relaList=this.relaList;<br />		//alert("relaList.length:"+relaList.length);<br />    	for(var i=0;i&lt;relaList.length;i++){<br />    		if (relaList[i][0]==parentKey){<br />    			var childList=relaList[i][1];<br />    			this.update(childList);<br />    			break; <br />    		}<br />    	}<br />}<br />RelaChange.prototype.update=function(keyList){<br />	this.select.options.length = 0;<br />	var n=0;<br />	var codeDescList=this.codeDescList; <br />	//alert("codeDescList.length:"+codeDescList.length);<br />	for(var i=0;i&lt;codeDescList.length;i++){<br />		for(var j=0;j&lt;keyList.length;j++){<br />			if (codeDescList[i][0]==keyList[j]){<br />				var item = new Option(codeDescList[i][1],codeDescList[i][0]);<br />				this.select.options.add(item);<br />				n++; <br />				break;          <br />			}<br />		}<br />		if (n==keyList.length) break;<br />	}<br />	this.select.options[0].selected = true;<br />	if (this.next!=null){<br />		this.next.change(keyList[0]);<br />	}	<br />}<br />function Province(next,relaList,codeDescList,select){<br />    RelaChange.call(this,next,relaList,codeDescList,select);<br />}<br />Province.prototype=new RelaChange();<br />function City(next,relaList,codeDescList,select){<br />	RelaChange.call(this,next,relaList,codeDescList,select);<br />}<br />City.prototype=new RelaChange();<br />function Area(next,relaList,codeDescList,select){<br />    RelaChange.call(this,next,relaList,codeDescList,select);<br />}<br />Area.prototype=new RelaChange();<br /><br />//Class InitRelaChange<br />function InitRelaChange(){<br />	this.relaList=new Array();<br />	this.codeDescList=new Array();<br />}<br />InitRelaChange.prototype.initRelaList=function(s){<br />};<br />InitRelaChange.prototype.initCodeDescList=function(s){<br />};<br />InitRelaChange.prototype.initDataList=function(s1,s2){<br />	this.initRelaList(s1);<br />	this.initCodeDescList(s2);<br />};<br /><br /><br />function InitProvince(){<br />	InitRelaChange.call(this);<br />}<br />InitProvince.prototype=new InitRelaChange();<br />InitProvince.prototype.initRelaList=function(s){	<br />}<br />//格式: code:desc,code:desc,<br />InitProvince.prototype.initCodeDescList=function(s){<br />    var list=this.codeDescList;<br />    var a=s.split(",");<br />    for(var i=0;i&lt;a.length;i++){<br />    	b=a[i].split(":");<br />	    list[i]=b;<br />    }<br />}<br />function InitCity(){<br />	InitProvince.call(this);<br />	this.len=2;<br />}<br />InitCity.prototype=new InitProvince();<br />//格式:code,code<br />InitCity.prototype.initRelaList=function(s){<br />	var len=this.len;<br />	//alert("len:"+this.len);<br />	var list=this.relaList;<br />	//alert("s:"+s);<br />	var a=s.split(",");<br />	var s1="";<br />	for(var i=0;i&lt;a.length;i++){<br />		var temp=a[i].substr(0,len)+",";<br />		if (s1.indexOf(temp)==-1){<br />			s1+=temp;<br />		}<br />	}<br />	s1=s1.substr(0,s1.length-1);<br />	//alert("s1:"+s1);<br />	var b=s1.split(",");<br />	for(var i=0;i&lt;b.length;i++){<br />		var ary=new Array();<br />		ary[0]=b[i];<br />		ary[1]=new Array();<br />		var n=0;<br />		for(var j=0;j&lt;a.length;j++){<br />			if (a[j].indexOf(b[i])==0)<br />				ary[1][n++]=a[j];<br />		}<br />		list[i]=ary;<br />	}<br />}<br />function InitArea(){<br />	InitCity.call(this);<br />	this.len=4;<br />}<br />InitArea.prototype=new InitCity();<br /><br />function proControl(province,city,area,pro1,pro2,city1,city2,area1,area2){<br />    var initObj=new InitArea();<br />    initObj.initDataList(area1,area2);<br />    //alert("initArea.relaList.length:"+initObj.relaList.length);<br />	var areaObj=new Area(null,initObj.relaList,initObj.codeDescList,area);<br />    var initObj=new InitCity();<br />    initObj.initDataList(city1,city2);<br />	var cityObj=new City(areaObj,initObj.relaList,initObj.codeDescList,city);<br />    var initObj=new InitProvince();<br />    initObj.initDataList(pro1,pro2);<br />	var ProObj=new Province(cityObj,initObj.relaList,initObj.codeDescList,province);<br />}
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192571#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 13 May 2008 13:44:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192571</link>
        <guid>http://www.javaeye.com/topic/192571</guid>
      </item>
          <item>
        <title>服务器转发时Html DOM的appendChild到底做了些什么？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xiwa.javaeye.com">xiwa</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192508" style="color:red;">http://www.javaeye.com/topic/192508</a>&nbsp;
          发表时间: 2008年05月13日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>有两页面：</p>
<p>页面一：WebForm1.aspx</p>
<p>有一个提交按钮和几个表单元素</p>
<p>当点击提交按钮时将页面转发至 WebForm2.aspx：<br /><br />private void Button1_Click(object sender, System.EventArgs e)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;Server.Transfer("WebForm2.aspx");<br />&nbsp;&nbsp;}</p>
<p>页面二：WebForm2.aspx<br /><br />页面加载时,遍历WebForm1.aspx提交过来的Form里的元素</p>
<p>重新生成&lt;input&gt;元素appendChild至document.body<br /><br />以下是WebForm2.aspx的代码：<br /><br />private void Page_Load(object sender, System.EventArgs e)<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;string forms="";<br />&nbsp;&nbsp;&nbsp;for(int i=0; i&lt;Request.Form.Count; i++)<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;forms+=Request.Form.Keys[i]+"|";<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;forms=forms.TrimEnd('|');<br />&nbsp;&nbsp;&nbsp;string script=" var supforms='{0}'; ";<br />&nbsp;&nbsp;&nbsp;script=string.Format(script,forms);</p>
<p>&nbsp;&nbsp;&nbsp;string scr=@"<br />&nbsp;&nbsp;&nbsp;&nbsp;var fnames=supforms.split('|');<br />&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0; i&lt;fnames.length; i++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var f=document.forms[0];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//if(f[fnames[i]!=undefined){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var el=document.createElement('&lt;input&gt;');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.type='text';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;el.value=fnames[i];<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.body.appendChild(el);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;alert(document.body.innerHTML);</p>
<p>&nbsp;&nbsp;&nbsp;";<br />&nbsp;&nbsp;&nbsp;scr=script+scr;</p>
<p>&nbsp;&nbsp;&nbsp;Page.RegisterStartupScript("k","&lt;script&gt;"+scr+"&lt;/script&gt;");</p>
<p>&nbsp;&nbsp;}</p>
<p>但是当追加完元素,在alter显示body的innerHTML后又弹出：</p>
<p>Internet Explorer 无法打开 Internet 站点 <a href="http://localhost/t/WebForm1.aspx">http://localhost/t/WebForm1.aspx</a>&nbsp; 已终止操作。</p>
<p>的警告。然后就整个页面就是</p>
<h1 id="textSection1" style="font: 13pt/14pt 宋体; color: black;"><span id="errorText">无法显示网页</span></h1>
<p>的状态。但是当追加完元素后点击alter弹出框确定按钮前界面上已经显示出了刚追加的元素，点击确定按钮之后才出现以上问题。<br />这究竟是什么原因？难道是appendChild保存了原始文档的引用，方法执行后还会去重新请求原来的WebForm1.aspx页面文档<br />而此时服务器已将页面转发至WebForm2.aspx导致引用不到原来文档吗？<br />appendChild方法到底做了些什么，还是我分析错了？请大家发表下高见！<br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192508#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 13 May 2008 10:53:48 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192508</link>
        <guid>http://www.javaeye.com/topic/192508</guid>
      </item>
          <item>
        <title>Ext 表格 之 带复选框的分页表格</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kc8886.javaeye.com">kc8886</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191834" style="color:red;">http://www.javaeye.com/topic/191834</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p><br /><span style="font-size: small; font-family: 宋体;">具体实现一个Ext表格流程如下<br />1)&nbsp;确定数据源，数据可以从服务器获取，也可以从本地获取，但是一般来说从本地获取意义不大。实现如下。<br />
<pre name="code" class="js">var jsonhttp=new Ext.data.HttpProxy({url:'aabbcc.do'});
var ds = new Ext.data.Store({ proxy: jsonhttp,
 reader:new Ext.data.JsonReader( {root:’table’},
 [{name:'id'},{name:'name'},{name:'sex'}])});</pre>
<font face="宋体" size="3">
<p>&nbsp;</p>
</font></span></p>
<p>&nbsp;</p>
<p><br /><span style="font-size: small; font-family: 宋体;">&nbsp;这段代码从aabbcc.do中获取数据，然后按照<br />{&lsquo;table&rsquo;:[{id:&rsquo;x&rsquo;,name:&rsquo;y&rsquo;,sex:&rsquo;z&rsquo;}]}格式简析,当然，返回数据也可以多条<br />{&lsquo;table&rsquo;:[{id:&rsquo;x&rsquo;,name:&rsquo;y&rsquo;,sex:&rsquo;z&rsquo;},{id:&rsquo;x1&rsquo;,name:&rsquo;y1&rsquo;,sex:&rsquo;z1&rsquo;},&hellip;&hellip;]}。<br />加上ds.load(); 加载数据。</span></p>
<p><br /><span style="font-size: small; font-family: 宋体;">2)&nbsp;定义表格列模型，如下</span></p>
<p><span style="font-size: small; font-family: 宋体;">
<pre name="code" class="js">var cm = new Ext.grid.ColumnModel([
{id:'0',header:'编号',dataIndex:'id'}, 
{id:'1',header:'姓名',dataIndex:'name'},
{id:'2',header:'性别',dataIndex:'sex'}]);
</pre>
<font face="宋体" size="3">
<p>&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果不希望在表格中显示某列，可以在对应的列中加上hidden：true，如果希望按照某一列排序的可以在加上sortable：true。</p>
</font></span>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p><br /><span style="font-size: small; font-family: 宋体;">3)&nbsp;定义表格</span></p>
<pre name="code" class="js">var grid = new Ext.grid.GridPanel({
renderTo:"xdiv",
height:260,
width:790, 
cm:cm,
store:ds});</pre>
<p>&nbsp;<span style="font-size: small; font-family: 宋体;"><br />renderTo：指定组建渲染的对象<br />cm：表格的列模型，</span></p>
<p><span style="font-size: small; font-family: 宋体;">store：表格的数据源。以上属性是配置一个表格的必须属性，当然，根据需要还可以增加一些属性如：<br />sm:表格的选择模型，<br />loadMask：是否需要在表格加载时显示遮罩效果。</span></p>
<p><span style="font-size: small; font-family: 宋体;">stripeRows：是否为表格加上分隔线。<br />tbar,bbar:分别用于指定表格上下的工具栏。<br />title:表格标题，加上这个属性后表格标题栏也会随之显示。</span></p>
<p><br /><span style="font-size: small; font-family: 宋体;">4)&nbsp;加上grid.render(),表格就可以显示了。</span></p>
<p><img style="vertical-align: middle;" src="http://www.javaeye.com/upload/picture/pic/14123/c7a87fc2-3401-3a50-9a5f-a8e3396ada68.bmp?1210440190" alt="" width="512" height="395" /></p>
<p><span style="font-size: small; font-family: 宋体;">如果在编号字段上加上sortable：true则效果如下</span></p>
<p><img src="http://www.javaeye.com/upload/picture/pic/14121/4e4851c6-24dc-3d9c-8023-49729e631cc3.bmp?1210440189" alt="" width="512" height="395" /></p>
<p><span style="font-size: small; font-family: 宋体;">加上collapsible:true,显示效果如下。</span></p>
<p><img src="http://www.javaeye.com/upload/picture/pic/14119/e60e9906-bf3e-345d-b6bc-dae9ec4c9617.bmp?1210440187" alt="" width="512" height="408" /></p>
<p><span style="font-size: small; font-family: 宋体;">为表格加上复选框。首先，定义一个选择模式，如下<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var sm = new Ext.grid.CheckboxSelectionModel();</span></p>
<p>
<p><span style="font-family: 宋体;">
<p><br />然后在grid的属性和ColumnModel的属性中加上sm属性即可的如下显示。</p>
<span style="font-size: small; font-family: 宋体;">
<p>&nbsp;</p>
</span></span>
<p>&nbsp;</p>
<br /><img src="http://www.javaeye.com/upload/picture/pic/14117/1404f86b-d9e2-384e-b693-2e498d7b472a.bmp?1210440186" alt="" width="512" height="402" /></p>
</p>
<p><span style="font-size: small; font-family: 宋体;">为表格加上分页。首先定义一个分页面板如下。如下：</span></p>
<p><span style="font-size: small; font-family: 宋体;">
<p>&nbsp;</p>
<pre name="code" class="js">var bb = new Ext.PagingToolbar({pageSize: 10, store: ds, displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2}条',emptyMsg: "没有记录"});</pre>
<p>&nbsp;</p>
<font face="宋体" size="3">
<p><span style="font-size: small; font-family: 宋体;">
<p><br />然后在grid中加入tbar或bbar属性bbar：bb即可的到分页效果，如下</p>
</span></p>
</font></span>
<p>&nbsp;</p>
</p>
<p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p><img src="http://www.javaeye.com/upload/picture/pic/14115/8ab7ae40-9b14-3cf1-9368-7d79d8ca8163.bmp?1210440185" alt="" width="537" height="401" /></p>
<p><span style="font-size: small; font-family: 宋体;">然而此时并不具备分页功能。需要给服务器提交几个参数，然后服务器根据这几个参数取出相应值，返回给客户端。与传统分页不同的是，服务器端不需要记录当前是第几页，分页参数在ds.load()中传递给服务器，如下。</span></p>
<p><span style="font-size: small; font-family: 宋体;">
<pre name="code" class="js">ds.load({params:{start:0,limit:10}}); </pre>
<font face="宋体" size="3">
<p><span style="font-size: small; font-family: 宋体;">
<p>&nbsp;&nbsp; <br />这条语句代表初始从第0条记录开始，每页显示10条记录。以后每点击下一页或上一页，ext会自动处理，不需要我们理会。界面如下</p>
</span></p>
</font></span>
<p>&nbsp;</p>
</p>
<p>
<p>&nbsp;</p>
</p>
<p><img src="http://www.javaeye.com/upload/picture/pic/14127/48e2125b-9744-3c47-a8f8-b9959084bded.bmp?1210440259" alt="" width="686" height="408" /></p>
<p><span style="font-size: small;">此时服务器传回来的数据格式如下</span></p>
<p><span style="font-size: small; font-family: 宋体;">
<pre name="code" class="xml">{'countrow':'17','table':[{'id':'1','name':'张一','sex':'男'},
{'id':'2','name':'李二','sex':'女'},
{'id':'3','name':'张三','sex':'男'},
{'id':'4','name':'赵八','sex':'女'},
{'id':'5','name':'黄武','sex':'男'},
{'id':'6','name':'赵千里','sex':'男'},
{'id':'7','name':'杨总一','sex':'男'},
{'id':'8','name':'刘月','sex':'女'},
{'id':'9','name':'姚远','sex':'男'},
{'id':'10','name':'黄大于','sex':'女'}
]}</pre>
<font face="宋体" size="3">
<p>&nbsp;</p>
</font></span>
<p><span style="font-size: small; font-family: 宋体;">而json的解析格式改为如下</span></p>
</p>
<p>&nbsp;</p>
<p><span style="font-size: small; font-family: 宋体;">
<pre name="code" class="xml">({totalProperty: 'countrow',root:'table'},[{name:'id'},
  {name:'name'},{name:'sex'}])</pre>
<font face="宋体" size="3">
<p>&nbsp;</p>
</font></span>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
<p><span style="font-size: small; font-family: 宋体;">totalProperty就是获得的记录总数</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: small;">全部代码如下</span></p>
<pre name="code" class="js">
Ext.onReady(function(){
 var jsonhttp=new Ext.data.HttpProxy({url:'griddemo.do?method=extgrid'});
 var ds = new Ext.data.Store({ proxy: jsonhttp,
  reader:new Ext.data.JsonReader({totalProperty: 'countrow',root:'table'},[{name:'id'},{name:'name'},{name:'sex'}])});
 ds.load({params:{start:0,limit:10}});
 var sm = new Ext.grid.CheckboxSelectionModel();
 var bb = new Ext.PagingToolbar({
   pageSize: 10, store: ds, displayInfo: true,displayMsg: '显示第 {0} 条到 {1} 条记录，一共 {2} 条',
   emptyMsg: "没有记录"});
 var cm = new Ext.grid.ColumnModel([sm,
  {id:'0',header:'编号',dataIndex:'id',sortable:true}, 
  {id:'1',header:'姓名',dataIndex:'name'},
  {id:'2',header:'性别',dataIndex:'sex'}]);
  var grid = new Ext.grid.GridPanel({
  renderTo:"tablediv",
  height:260,
  width:450, 
  cm:cm,
  sm:sm,
  title:'我的表格',
  collapsible:true,
  store:ds,
  bbar:bb,
  });
 grid.render();
});
</pre>
<p>&nbsp;</p>
<p><span style="font-size: small;">每次分页的时候服务器端接收两个参数，几start和limit，只需要处理这两个参数就可以了，不必理会当前是第几页，ext会自动处理。<br /></span></p>
<p><span style="font-size: small;">start：从第几条记录开始</span></p>
<p><span style="font-size: small;">limit：每页显示几条记录</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191834#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 02:04:02 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191834</link>
        <guid>http://www.javaeye.com/topic/191834</guid>
      </item>
          <item>
        <title>利用javascript实现md5的本地加密</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://jackyoo8.javaeye.com">jackyoo8</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192137" style="color:red;">http://www.javaeye.com/topic/192137</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          下面介绍的方法是通过js来实现的md5<br />首先要到http://pajhome.org.uk/crypt/md5/ 下载md5的js<br />本文的附件中已经提供<br />1.通过这个md5的js生成的代码和php的是一样，减少服务器在md5加密的负担<br /><br />2.因为密码是直接在客户端就进行加密，不像php要传到服务器端才加密，这样传输过程的安全也得到进一步的加强<br /><br />下面是我做的一个简单的m5生成器
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192137#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 12 May 2008 10:31:29 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192137</link>
        <guid>http://www.javaeye.com/topic/192137</guid>
      </item>
          <item>
        <title>Jquery ui 更新到1.5(b4)版本了，酷了很多</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bluebug.javaeye.com">bluebug</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/190768" style="color:red;">http://www.javaeye.com/topic/190768</a>&nbsp;
          发表时间: 2008年05月07日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          今天在选取用ext还是用jquery ui作为新项目的组件库，意外发现jqery ui更新到1.5（b4）版本了，看来离1.5正式版本不远了。<br />在http://ui.jquery.com/demos里面看到的demo比起以前酷了很多。。。研究中
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/190768#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 07 May 2008 23:21:17 +0800</pubDate>
        <link>http://www.javaeye.com/topic/190768</link>
        <guid>http://www.javaeye.com/topic/190768</guid>
      </item>
          <item>
        <title>typeof Function.prototype 为什么是function()</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://i-love-sc.javaeye.com">i_love_sc</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/192149" style="color:red;">http://www.javaeye.com/topic/192149</a>&nbsp;
          发表时间: 2008年05月12日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          难道不是 object吗？
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/192149#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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, 12 May 2008 10:57:13 +0800</pubDate>
        <link>http://www.javaeye.com/topic/192149</link>
        <guid>http://www.javaeye.com/topic/192149</guid>
      </item>
          <item>
        <title>Ext 表格的操作</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kc8886.javaeye.com">kc8886</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191994" style="color:red;">http://www.javaeye.com/topic/191994</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p><span style="font-size: small; font-family: 宋体;"><strong>1）&nbsp;表格数据选择</strong></span></p>
<p><span style="font-size: small; font-family: 宋体;"><strong></strong>
<p><br />行选择模式：</p>
<pre name="code" class="js">var rowcount = grid.getSelectionNode().getSelections();</pre>
<p>&nbsp;<br />可以获取全部选中的记录，得到的rowcount将是一个Array，比如想获取sex列的数据，语句如下</p>
<pre name="code" class="js">var strsex = rowcount[i].get(‘sex’);</pre>
<p>&nbsp;<br />单元格选择模式</p>
<p><br />如果在GridPanel的配置属性增加sm属性如下</p>
<pre name="code" class="js">sm:new Ext.grid.CellSelectionModel();
</pre>
<p>&nbsp;则表格的选择模式为单元格选择模式。当单击时将选中对应的某一个单元格，而不是默认的选择某一行。选择方式如下</p>
<pre name="code" class="js">var cell = grid.getSelectionNode().getSelectedCell();</pre>
<p>&nbsp;<br />得到的cell记录了当前选择的行(cell[0])以及列(cell[1]).可以通过一下语句得到该单元格数据</p>
<pre name="code" class="js">var colname = grid.getColumnModel().getDataIndex(cell[1]);  //获取列名
var celldata = grid.getStore().getAt(cell[0]).get(colname); //获取数据</pre>
<p>&nbsp;<br />getStore():获取表格的数据集<br />getAt():获取该数据集cell[0]行<br />get():获取该行colname的数据</p>
<p><br /><strong>2）&nbsp;为表格增加链接</strong></p>
<p><strong></strong></p>
<p><br />有时我们需要为表格中的某一列添加一个链接。可以利用renderer配置属性为该列添加html<br />如下：{id:'3',header:'名称',dataIndex:'name',renderer:DomUrl},<br />定义DomUrl方法</p>
<p>&nbsp;</p>
<pre name="code" class="js">function DomUrl(value){
return "&lt;a href=&gt;"+value+"&lt;/a&gt;";
}</pre>
<p>&nbsp;<br />如果表格内的数据是一个链接如：<a href="http://www.sina.com">www.sina.com</a>这样写法自然没有问题，但是大多数时候我们在表格中不会直接写一个链接，如果又需要根据单元格内容动态为链接添加几个参数。那这种写法就几乎没有什么用了。因为这个属性是在表格初始化的时候定义好的，而且表格初始化之后这个属性无法改变，也就是只读属性。</p>
<p><br />处理方法如下：<br />定义一个全局变量，初始值为0；DomUrl函数如下</p>
<pre name="code" class="js">function DomUrl(value){
var row = grid.getSelectionModel().selectRow(startrow);//选中当前行
var rownum = grid.getSelectionModel().getSelected();//获取当前行
startrow ++;
var strurl = "abc.jsp?id=" + rownum.get('id');//获取当前选中行的值，并组织链接字符串
return "&lt;a href='"+strurl+"'&gt;"+value+"&lt;/a&gt;";
}</pre>
<p>&nbsp;<br />不过不要忘记在下次提交的时候将startrow赋值为0。</p>
<p><br /><strong>3）&nbsp;表格的属性</strong></p>
<p><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表格的属性分为配置属性（在操作表格时无法修改），以及其他可读写属性，方法，以及事件。如下：</p>
<p><br />&nbsp;<strong>配置属性</strong></p>
<p><strong></strong></p>
<p><br />a)&nbsp;activeItem：渲染布局时激活的子元素。<br />b)&nbsp;applyTo：指定渲染对象。<br />c)&nbsp;autoDestroy：当容器的子元素从容器中移除时是否自动销毁。<br />d)&nbsp;autoExpandColumn：指定自动填充表格剩余区域的列id<br />e)&nbsp;autoExpandMax：可自动扩张的最大宽度。<br />f)&nbsp;autoExpandMin：可自动扩张的最小宽度<br />g)&nbsp;autoHeight:自动扩充高度<br />h)&nbsp;autoShow：是否自动显示<br />i)&nbsp;autoWidth：自动扩充宽度<br />j)&nbsp;bbar/tbar：底部/顶部状态栏<br />k)&nbsp;bufferResize：容器再布局的缓冲频率<br />l)&nbsp;colModel/cm:列模式<br />m)&nbsp;cls：组件的额外css格式。<br />n)&nbsp;collapsible:是否显示快捷隐藏按钮<br />o)&nbsp;defaults：指定默认配置。<br />p)&nbsp;disableSelection：是否禁止选择表格行或列<br />q)&nbsp;enableDragDrop：是否允许表格列的拖放操作。<br />r)&nbsp;enableHdMenu：是否显示表格列的菜单。<br />s)&nbsp;frame：边框是否显示<br />t)&nbsp;loadMask: 是否显示加载动画<br />u)&nbsp;selModel/sm：表格选择模式<br />v)&nbsp;store:表格数据集<br />w)&nbsp;stripeRows：是否显示分隔线。<br />x)&nbsp;title：表格标题</p>
<p><br /><strong>方法</strong></p>
<p><br />a)&nbsp;getColumnModel()：得到表格列模型<br />b)&nbsp;getGridEl():得到表格下的元素<br />c)&nbsp;getPosition():得到组件的当前位置，返回一个数组<br />d)&nbsp;getSelectionModel():得到选中模型<br />e)&nbsp;getSize():得到组件大小<br />f)&nbsp;getStore():得到组件的数据集<br />g)&nbsp;getView():得到表格的GridView对象。<br />h)&nbsp;hide():隐藏当前组件<br />i)&nbsp;isVisible():判断当前组件是否显示<br />j)&nbsp;setDisabled( Boolean):设置组件的可用性<br />k)&nbsp;un():解除组件的监听<br />l)&nbsp;on()：为组件添加监听<br />on ( String eventName, Function handler, [Object scope] )<br />eventName:添加监听的名称<br />handler:事件处理函数<br />scope:事件响应的作用域,包括scope,delay,single,buffer。<br />&nbsp;&nbsp; <br /><br /><br />&nbsp;&nbsp;</p>
</span></p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191994#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 21:23:00 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191994</link>
        <guid>http://www.javaeye.com/topic/191994</guid>
      </item>
          <item>
        <title>西方人通常发现不了的一个IE的bug</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hax.javaeye.com">hax</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191555" style="color:red;">http://www.javaeye.com/topic/191555</a>&nbsp;
          发表时间: 2008年05月09日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          这个问题我大概在一年多以前在某个用到VML的页面中（当时倒是记录了<a href="http://blog.csdn.net/hax/archive/2006/11/23/1406679.aspx" target="_blank">VML的一个严重问题</a>）首次发现了这个Bug。经过一番狗狗之后，也未发现有同样的报告。后来我又逐渐在几种其他非VML的情形下重现了这个奇异的Bug。经过一番探究，我大致推断出了这个bug的原因。不过我一直没有公开发布过这个有趣的问题，只是跟少数同事提到过它。这个bug有个有趣的特点，就是西方人通常不会碰到这个bug。<br /><br />最近，<a href="http://realazy.org/blog/" target="_blank">真懒</a>同学（realazy）在<a href="http://realazy.org/blog/2008/03/29/understand-0-settimeout/#comment-63839" target="_blank">《认识延迟时间为 0 的 setTimeout》一文</a>中举例说明setTimeout的用途。代码大意如下：<br /><pre name="code" class="javascript">
$('myButton').onmousedown = function () {
  var input = document.createElement('input');
  input.type = 'text';
  $('myDiv').appendChild(input);
  input.focus();
}
</pre><br />在IE中，新创建的input没有如预期的获得焦点。<br /><br />如果把input.focus()放在一个setTimeout中延时执行，则就可以获得焦点。<br /><br />这个例子本身其实并不能证明realazy想要说明的观点，因为他不小心碰到了一个IE的微妙bug。在<a href="http://realazy.org/blog/2008/03/29/understand-0-settimeout/#comment-51746" target="_blank">留言</a>中，<a href="http://www.lunaticsun.com/" target="_blank">Lunatic Sun</a>倒是敏锐的判断出这是IE的bug，只是这个bug的本质不是那么容易认识到，它其实并不是onmousedown本身的bug。<br /><br />实际上，这是IE的focus机制的bug。<br /><br />IE中的所有元素其实并不是被凭空绘制出来的，而是统统基于已有的Windows控件之上。除了典型的按钮、下拉菜单等，普通的div其实也是一个textbox控件。<br /><br />所以IE的HTML focus等实际是被转换为windows控件的focus，于是在IE中存在两种不同层次的focus机制。理想上，HTML的focus应该被同步转换为windows控件的focus，然而IE可怜的代码导致这种转换存在许多bug。我们经常遇到的焦点虚线框丢失的问题其实就是一个例子。<br /><br />实际上，在上面的例子中，表面上input没有得到焦点，但是其实调用focus()之后，HTML focus确实已经到了新生成的input中，这一点你可以通过document.activeElement来验证，你也可以按tab和shift-tab观察焦点的切换来证明这一点。然而，由于mousedown事件默认会获得控件焦点，所以windows控件focus就跑回了你的按钮上面了。这里出现了windows focus机制和html focus机制的脱节。显然IE在focus上的同步代码实在是太脆弱了。<br /><br />事实上，IE对焦点的控制似乎本来就不和逻辑。所有的<a href="http://www.satzansatz.de/cssd/onhavinglayout.html" target="_blank">hasLayout</a>元素都能获得焦点！结果一个页面上大部分区域在mousedown之后焦点就不知跑到哪个元素上了——这显然不是我们想要的行为——合乎HTML规范逻辑的行为应该是只有交互控件，如表单控件和A元素等，才能获得焦点。这导致一个典型的用户体验问题：在一个限制高度的可卷动区域中（例如一个长表单），拖动scrollbar，控件焦点就丢失——实际焦点跑到scrollbar所在的元素（例如form元素）上了。最严重的是，body元素一般总会有scrollbar！为了缓解这个问题，微软为body元素打了补丁，使得body上的scrollbar不会抢走焦点。然而IE这个patch打得实在是太烂了，在标准模式下，canvas从body变成了html元素，所以页面scrollbar就到了html元素上，结果bug又回来了！<br /><br />撇开抢焦点问题，我们回到前面的话题。<br /><br />既然html focus还是在input元素上，那么当时windows控件焦点到底跑哪里去了？实际上这个焦点跑到了mousedown所发生的对象上。比如如果是一个input按钮，焦点就会在该input按钮实际对应的windows的Button控件上。不过button元素的实现和一般的input不同，所以button元素上的mousedown之后，windows控件焦点实际上会跑到button元素外层的那个元素所对应的windows控件（通常是TextBox控件）中。<br /><br />如何证明这一点？我过去用过一个调试工具可以显示出每个html控件实际的windows控件，也能查看实际的windows系统焦点。不过现在想不起来那个工具的名称了。搞笑的是，此处还会出现一个非常orz的症状——也就是本文标题所称的“西方人通常发现不了的一个IE的bug”——可以证明这一点。<br /><br />focus问题 + 西方人通常发现不了。各位是否已经猜到了呢？大家不妨用<a href="http://realazy.org/lab/settimeout.html" target="_blank">realazy的那个页面</a>中的第一个按钮来直接实验一把。<br /><br />我会在下篇blog中继续聊这个话题。
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191555#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Fri, 09 May 2008 20:00:12 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191555</link>
        <guid>http://www.javaeye.com/topic/191555</guid>
      </item>
          <item>
        <title>javascript drag&amp;drop beginning</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://wangxin0072000.javaeye.com">wangxin0072000</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191903" style="color:red;">http://www.javaeye.com/topic/191903</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <strong>javascript drag&drop beginning</strong><br />首先我不赞成自己实现拖拽功能，因为比较麻烦，<br />建议用当下比较流行的一些库，用什么那就看项目需要了，<br />但是即便用别人的东西也只至少知道原理，所以我们先看看原理吧<br />如果想自己手动实现拖拽，那么我们先看看都要有哪些工作要做。<br />1 至少要获得鼠标的坐标吧，不然还干个屁。<br />2 至少要获得鼠标的动作吧，不然我怎么知道什么时候拖。什么时候停<br />3 在页面上拖动一个目标实际上就是，改变某个标签的坐标，当然一般也要适当改变<br />也些样式。所以你至少要知道一些css方面的知识。<br /><br />1 鼠标坐标：look：<br /><pre name="code" class="java">function mouseCoords(ev){
    if (ev.pageX || ev.pageY) {
        return {
            x: ev.pageX,
            y: ev.pageY
        };
    }
    return {
        x: ev.clientX + document.body.scrollLeft - document.body.clientLeft,
        y: ev.clientY + document.body.scrollTop - document.body.clientTop
    };
}</pre>唯一要解释的就是型参ev：ev实际就是windows.even:<br />调用这个函数：<br /><pre name="code" class="java">document.onmousemove = mouseMove;
function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);
} // mousePos.x就是横坐标，mousePos.y就是纵坐标</pre>好了，就到这吧。<br />2 复习一下doument下面的都鼠标动作吧（当然只列出我们用的到的）<br />onmousedown:当焦点停留在当前元素上并且按下鼠标键时触发<br />onmousemove:当光标在当前元素上并且光标在当前元素上面移动时触发<br />onmouseout:当光标移出某个元素时触发<br />onmouseover:当贯标移动到某个元素上面时触发<br />onmouseup:当焦点在当前元素上并松开鼠标键时触发<br />下一步：搞清楚流程：<br />拖拽的流程：<br />捕获鼠标按下动作，之后判断鼠标按下所在的坐标是不是你想要的DOM对象，<br />如果是那么让这个对象的坐标跟着鼠标移动而改变，直到鼠标松开（onmouseup）。<br />根据这个流程，我们第一步要先把我们想要移动的DOM对象<br />记录下拉，而且我们必须把这个对象的style position <br />设置为absolute。<br /><pre name="code" class="java">//定义监听函数
document.onmousemove = mouseMove;
document.onmouseup   = mouseUp;
//存放我们想要拖动的DOM对象
var dragObject  = null;
var mouseOffset = null;
function mouseMove(ev){
	ev           = ev || window.event;
	//这里用到了上面第一点写的函数（mouseCoords）
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
		dragObject.style.top      = mousePos.y;
		dragObject.style.left     = mousePos.x;

		return false;
	}
}
function mouseUp(){
	dragObject = null;
}

function makeDraggable(item){
	if(!item) return;
	item.onmousedown = function(ev){
		dragObject  = this;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}</pre>这段代码的意思就是告诉浏览器页面上的哪些元素可以被拖动。<br />然后如果捕获的元素是允许被拖动的（即鼠标所在的区域<br />是这个元素的范围内），那么这个元素的坐标就<br />随着鼠标变化，直到鼠标弹起。<br />那么为了让鼠标知道哪些元素可以被拖动，我们需要制作<br />一个容器，盛放这些元素，并且写一个注册函数，把可以拖动<br />的元素注册到容器中：<br /><pre name="code" class="java">
var dropTargets = [];

function addDropTarget(dropTarget){
	dropTargets.push(dropTarget);
}

function mouseUp(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	for(var i=0; i&lt;dropTargets.length; i++){
		var curTarget  = dropTargets[i];
		var targPos    = getPosition(curTarget);
		var targWidth  = parseInt(curTarget.offsetWidth);
		var targHeight = parseInt(curTarget.offsetHeight);
		
		if(
			(mousePos.x > targPos.x)                &&
			(mousePos.x &lt; (targPos.x + targWidth))  &&
			(mousePos.y > targPos.y)                &&
			(mousePos.y &lt; (targPos.y + targHeight))){
				// dragObject was dropped onto curTarget!
		}
	}
	dragObject   = null;
}</pre>所以如果你使用javascript lib，那么如果给某个元素增加拖动<br />属性，那么一般都可以捕获到 up 和 down事件，并可以在这些<br />事件中增加自己的动作。
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191903#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/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 11 May 2008 11:26:37 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191903</link>
        <guid>http://www.javaeye.com/topic/191903</guid>
      </item>
          <item>
        <title>jQuery选择器的强大--代码实例</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ayeah.javaeye.com">ayeah</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191788" style="color:red;">http://www.javaeye.com/topic/191788</a>&nbsp;
          发表时间: 2008年05月10日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          有两个list，都是多选的，要求一个按钮，点击时将list1中所有选中的项复制到list2中，而且在list2中已经存在的项就不再添加，传统的代码，你想想要多少个循环？<br /><br />使用jquery的selector，一行搞定：<br /><br /><pre name="code" class="js">
function copy_onclick(){
	$("#list1 option:selected").each(function () {
                $(document.createElement("option"))
		.attr("value",$(this).val())
		.text($(this).val())
		.appendTo('#list2:not(:has(option[value=\''+$(this).val()+'\']))');
		});
	}

</pre>
          <br/>
          <span style="color:red;">
            <a href="http://www.javaeye.com/topic/191788#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/70' target='_blank'><span style="color:red;font-weight:bold;">第二届网络工程师侠客行大会5月24日杭州举行</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>Sat, 10 May 2008 21:27:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/191788</link>
        <guid>http://www.javaeye.com/topic/191788</guid>
      </item>
          <item>
        <title>Gwt-Ext学习笔记之进级篇</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://julycn.javaeye.com">julycn</a>&nbsp;
                    链接：<a href="http://www.javaeye.com/topic/191819" style="color:red;">http://www.javaeye.com/topic/191819</a>&nbsp;
          发表时间: 2008年05月11日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/>
          <p>&nbsp;</p>
<p class="MsoNormal" style="text-align: center;" align="center">Gwt-Ext<span style="font-family: 宋体;" lang="ZH-CN">学习笔记之进级篇</span>
<span style="font-family: 宋体;"></span>
</p>
<p class="MsoNormal" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>一、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">定义服务</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: 0.5in;">GWT<span style="font-family: 宋体;" lang="ZH-CN">过程调用大部分在两个类进行。在服务器端，定义一个</span>
RemoteServiceServlet<span style="font-family: 宋体;" lang="ZH-CN">子类</span>
RegisterActionImpl.java<span style="font-family: 宋体;" lang="ZH-CN">（远程服务实现类）。在这个类中，将操作数据库并将值返回给客户机。在客户端，定义一个实现</span>
AsyncCallback<span style="font-family: 宋体;" lang="ZH-CN">接口的类</span>
Register.java<span style="font-family: 宋体;" lang="ZH-CN">（客户端实现类），在这个类中，定义服务器操作完成时客户机页面如何处理数据（或异常）。除了这两个类之外，必须编写一些绑定代码使</span>
GWT-Ext <span style="font-family: 宋体;" lang="ZH-CN">可以将客户端类和服务器端类绑定在一起</span>
, <span style="font-family: 宋体;" lang="ZH-CN">绑定代码包含</span>
RegisterAction.java<span style="font-family: 宋体;" lang="ZH-CN">（远程接口）和</span>
RegisterActionAsync.java<span style="font-family: 宋体;" lang="ZH-CN">（远程异步接口）两个不同的接口外加一些客户端代码以及一两个设置。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在</span>
gwtext<span style="font-family: 宋体;" lang="ZH-CN">项目上点击右键，选择</span>
New&mdash;Other&mdash;Remote Service,<span style="font-family: 宋体;" lang="ZH-CN">创建名为</span>
RegisterAction<span style="font-family: 宋体;" lang="ZH-CN">的远程服务接口。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in;"><!-- [if gte vml 1]><v:shapetype
 id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
 path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
 <v:stroke joinstyle="miter"/>
 <v:formulas>
  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
  <v:f eqn="sum @0 1 0"/>
  <v:f eqn="sum 0 0 @1"/>
  <v:f eqn="prod @2 1 2"/>
  <v:f eqn="prod @3 21600 pixelWidth"/>
  <v:f eqn="prod @3 21600 pixelHeight"/>
  <v:f eqn="sum @0 0 1"/>
  <v:f eqn="prod @6 1 2"/>
  <v:f eqn="prod @7 21600 pixelWidth"/>
  <v:f eqn="sum @8 21600 0"/>
  <v:f eqn="prod @7 21600 pixelHeight"/>
  <v:f eqn="sum @10 21600 0"/>
 </v:formulas>
 <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
 <o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:381pt;
 height:381.75pt'>
 <v:imagedata src="file:///C:\DOCUME~1\Eric\LOCALS~1\Temp\msohtmlclip1\01\clip_image001.jpg"
  o:title="0K3Y2Y{8JRRW2OY65{OSALV"/>
</v:shape><![endif]--><!-- [if !vml]--><img src="../../upload/picture/pic/14109/4f58d19f-5d73-3137-9e86-695df7ce8945.jpg" alt="" width="508" height="509" />
<!-- [endif]--></p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">把</span>
PostgreSQL<span style="font-family: 宋体;" lang="ZH-CN">数据库的</span>
JDBC<span style="font-family: 宋体;" lang="ZH-CN">包</span>
postgresql-8.2-505.jdbc3.jar<span style="font-family: 宋体;" lang="ZH-CN">加入到项目中（其他数据库，加入相应的</span>
JDBC<span style="font-family: 宋体;" lang="ZH-CN">包）。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>c.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">远程服务的实现类，在</span>
RegisterActionImpl.java<span style="font-family: 宋体;" lang="ZH-CN">中加入如下代码：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */
public class RegisterActionImpl extends RemoteServiceServlet implements RegisterAction {

	private static final long serialVersionUID = 1L;

	public void saveData(Map formData) {
		Connection conn=null;
		try {
			Class.forName(&quot;org.postgresql.Driver&quot;);
			String connString=&quot;jdbc:postgresql://127.0.0.1:5432/gwtext&quot;;
			conn=DriverManager.getConnection(connString,&quot;julycn&quot;,&quot;julycn&quot;);
			StringBuffer sqlQuery=new StringBuffer(&quot;insert into person (username,password,email,phone) &quot;);
			sqlQuery.append(&quot;values(?,?,?,?)&quot;);
			PreparedStatement stmt=conn.prepareStatement(sqlQuery.toString());
			stmt.setString(1, URLDecoder.decode(formData.get(&quot;username&quot;).toString(),&quot;UTF-8&quot;));
			stmt.setString(2, URLDecoder.decode(formData.get(&quot;password&quot;).toString(),&quot;UTF-8&quot;));
			stmt.setString(3, URLDecoder.decode(formData.get(&quot;email&quot;).toString(),&quot;UTF-8&quot;));
			stmt.setString(4, URLDecoder.decode(formData.get(&quot;phone&quot;).toString(),&quot;UTF-8&quot;));
			stmt.execute();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
		
	}
}
</pre>
&nbsp;
<p class="MsoNormal" style="margin-left: 1in; line-height: normal;"><span style="color: red;"></span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>d.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]-->GWT-Ext<span style="font-family: 宋体;" lang="ZH-CN">远程服务的要求很简单，它必须扩展</span>
RemoteServiceServlet<span style="font-family: 宋体;" lang="ZH-CN">并实现一个接口。</span>
</p>
<p class="MsoNormal" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>二、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">绑定代码</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">要使新程序可用于客户端应用程序，必须定义两个接口。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>b.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">定义一个远程接口类</span>
RegisterAction.java<span style="font-family: 宋体;" lang="ZH-CN">，代码如下</span>
</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */
public interface RegisterAction extends RemoteService {

	public static final String SERVICE_URI = &quot;/RegisterAction&quot;;

	public static class Util {

		public static RegisterActionAsync getInstance() {

			RegisterActionAsync instance = (RegisterActionAsync) GWT
					.create(RegisterAction.class);
			ServiceDefTarget target = (ServiceDefTarget) instance;
			target.setServiceEntryPoint(GWT.getModuleBaseURL() + SERVICE_URI);
			return instance;
		}
	}

	public void saveData(Map formData);
}
</pre>
&nbsp;
<p class="MsoNormal" style="margin-left: 1in;"><span style="color: red;"></span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>c.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">在这里完成的所有操作是获得用于实际的具体类中方法的同一个签名。这里的主要限制是接口必须扩展</span>
com.google.gwt.user.client.rpc.RemoteService;<span style="font-family: 宋体;" lang="ZH-CN">。此外，参数和返回值必须属于</span>
GWT <span style="font-family: 宋体;" lang="ZH-CN">可以序列化的类型</span>
(<span style="font-family: 宋体;" lang="ZH-CN">见备注</span>
)<span style="font-family: 宋体;" lang="ZH-CN">。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>d.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">定义远程异步接口</span>
RegisterActionAsync.java
<span style="font-family: 宋体;" lang="ZH-CN">，代码如下：</span>
</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */
public interface RegisterActionAsync {

	public void saveData(Map formData, AsyncCallback callback);
}
</pre>
&nbsp;
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>e.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">远程异步类的服务接口是从上面描述的远程服务类中派生出来的。两个类必须位于同一个包中，并且该包必须对</span>
GWT-EXT <span style="font-family: 宋体;" lang="ZH-CN">客户机代码可见。远程异步类中的类名必须是远程服务接口的名称且末尾附加字符串</span>
Async<span style="font-family: 宋体;" lang="ZH-CN">。对于远程服务接口中的每个方法，远程异步类必须有一个返回类型更改为</span>
 void <span style="font-family: 宋体;" lang="ZH-CN">的匹配方法和一个</span>
 AsyncCallback <span style="font-family: 宋体;" lang="ZH-CN">类型的附加参数。客户端代码将使用</span>
AsyncCallback <span style="font-family: 宋体;" lang="ZH-CN">作用于服务器响应上。</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>f.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">注册服务器代码，将下面的一行加入到</span>
Register.gwt.xml<span style="font-family: 宋体;" lang="ZH-CN">中</span>
</p>
<pre name="code" class="java">&lt;servlet class=&quot;com.gwtext.julycn.server.RegisterActionImpl&quot; path=&quot;/RegisterAction&quot; /&gt;</pre>
&nbsp;
<p class="MsoNormal" style="margin-left: 40.5pt; text-indent: -22.5pt;"><!-- [if !supportLists]--><span><span>三、</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">执行客户端调用</span>
</p>
<p class="MsoNormal" style="margin-left: 1in; text-indent: -0.25in;"><!-- [if !supportLists]--><span><span>a.<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span>
</span>
</span>
<!-- [endif]--><span style="font-family: 宋体;" lang="ZH-CN">完成服务器端操作以后，现在应该让客户机执行过程调用了。在这里基本的想法是慎重地告诉</span>
GWT <span style="font-family: 宋体;" lang="ZH-CN">系统正在调用的是哪个远程服务。然后将</span>
 AsyncCallback <span style="font-family: 宋体;" lang="ZH-CN">对象发送出去；最后，</span>
GWT <span style="font-family: 宋体;" lang="ZH-CN">将其送回，您可对结果进行操作。修改模型文件</span>
Register.java<span style="font-family: 宋体;" lang="ZH-CN">，代码如下：</span>
</p>
<p>&nbsp;</p>
<pre name="code" class="java">/**
 * @author 七月天
 *
 */
public class Register implements EntryPoint,AsyncCallback {
	public void onModuleLoad() {
		createComponents();
	}

	private void createComponents() {
		final FormPanel frm = new FormPanel();
		frm.setDraggable(true);
		frm.setWidth(300);
		frm.setTitle(&quot;用户注册&quot;);
		frm.setPaddings(25);

		TextField txtUsername = new TextField(&quot;用户名&quot;, &quot;username&quot;);
		TextField txtPassword = new TextField(&quot;密码&quot;, &quot;password&quot;);
		TextField txtEmail = new TextField(&quot;邮箱&quot;, &quot;email&quot;);
		TextField txtPhone = new TextField(&quot;电话&quot;, &quot;phone&quot;);

		txtUsername.setRegex(&quot;^[a-zA-Z]*$&quot;);
		txtUsername.setRegexText(&quot;用户名必须为字母！&quot;);
		txtUsername.setAllowBlank(false);

		txtPassword.setPassword(true);
		txtPassword.setRegex(&quot;^[a-zA-Z]*$&quot;);
		txtPassword.setRegexText(&quot;密码必须为字母！&quot;);
		txtPassword.setAllowBlank(false);

		txtEmail.setVtype(VType.EMAIL);
		txtEmail.setVtypeText(&quot;请输入合法的邮箱地址！&quot;);
		txtEmail.setAllowBlank(false);

		txtPhone.setRegex(&quot;^\\d*$&quot;);
		txtPhone.setRegexText(&quot;电话必须为数字！&quot;);
		txtPhone.setAllowBlank(false);