﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;h1&gt;&lt;font color="red" size="36"&gt;︻┳═一Java&lt;/font&gt;&lt;/h1&gt;-文章分类-Ajax</title><link>http://www.blogjava.net/rain1102/category/14841.html</link><description>&lt;b&gt;&lt;font color="#3C1435"&gt;08年奋斗目标：&lt;/font&gt;&lt;font color="maroon"&gt;赚钱买个房子！&lt;/font&gt;&lt;/b&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 19 Mar 2008 12:30:32 GMT</lastBuildDate><pubDate>Wed, 19 Mar 2008 12:30:32 GMT</pubDate><ttl>60</ttl><item><title>ajax jsp 无刷新上传文件</title><link>http://www.blogjava.net/rain1102/articles/187170.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 19 Mar 2008 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/187170.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187170.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/187170.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/187170.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/187170.html</trackback:ping><description><![CDATA[首先要说的就是 <span class="hilite1"><span class="hilite1">ajax</span></span> 是无法实现上传文件的，可以想一下<span class="hilite1"><span class="hilite1">ajax</span></span>与后台通信都是通过传递字符串，怎么能传递文件呢？其实出于安全考虑js是不能操作文件的，所以就不要再说用<span class="hilite1"><span class="hilite1">ajax</span></span>来实现文件的上传了，这是不可能的。<br />
&nbsp;&nbsp;&nbsp; 而本文实现的<span class="hilite2"><span class="hilite2">文件上传</span></span>也是无页面刷新的，可以说是一种"类似<span class="hilite1"><span class="hilite1">AJAX</span></span>"方法。<br />
&nbsp;&nbsp;&nbsp; 开始之前先说两句无关的，其实在<span class="hilite1"><span class="hilite1">ajax</span></span>出现之前，web应用也可以是无刷新的，那时大多通过IFrame来做到这一点。当然<span class="hilite1"><span class="hilite1">Ajax</span></span>出现之后，人们一窝蜂地投奔<span class="hilite1"><span class="hilite1">Ajax</span></span> 的阵营了，iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。ps：<span class="hilite1"><span class="hilite1">Ajax</span></span>技术基本上可以说是由google公司带起来的，但少Gmail中上传文件用的还是 IFrame，所以说使用IFrame来上传文件是最好的选择。<br />
&nbsp;&nbsp;&nbsp; 我在这里这里用的技术是jsp，其实asp，php等也是一样可以这么实现的<br />
&nbsp;&nbsp;&nbsp; 一共两个文件就可实现：index.html 和 upload.jsp<br />
--index.html<span>
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜html＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜form&nbsp;action=</span><span class="string">"upload.jsp"</span><span>&nbsp;id=</span><span class="string">"form1"</span><span>&nbsp;name=</span><span class="string">"form1"</span><span>&nbsp;encType=</span><span class="string">"multipart/form-data"</span><span>&nbsp;&nbsp;method=</span><span class="string">"post"</span><span>&nbsp;target=</span><span class="string">"hidden_frame"</span><span>&nbsp;＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜input&nbsp;type=</span><span class="string">"file"</span><span>&nbsp;id=</span><span class="string">"file"</span><span>&nbsp;name=</span><span class="string">"file"</span><span>&nbsp;style=</span><span class="string">"width:450"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜INPUT&nbsp;type=</span><span class="string">"submit"</span><span>&nbsp;value=</span><span class="string">"上传文件"</span><span>＞＜span&nbsp;id=</span><span class="string">"msg"</span><span>＞＜/span＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜br＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;＜font&nbsp;color=</span><span class="string">"red"</span><span>＞支持JPG,JPEG,GIF,BMP,SWF,RMVB,RM,AVI文件的上传＜/font＞&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;＜iframe&nbsp;name='hidden_frame'&nbsp;id=</span><span class="string">"hidden_frame"</span><span>&nbsp;style='display:none'＞＜/iframe＞ &nbsp;&nbsp;</span>
    <li class=""><span>＜/form＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜/body＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/html＞ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>＜script&nbsp;type=</span><span class="string">"text/javascript"</span><span>＞ &nbsp;&nbsp;</span>
    <li class=""><span>function&nbsp;callback(msg) &nbsp;&nbsp;</span>
    <li class="alt"><span>{ &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML&nbsp;=&nbsp;document.getElementById(</span><span class="string">"file"</span><span>).outerHTML; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById(</span><span class="string">"msg"</span><span>).innerHTML&nbsp;=&nbsp;</span><span class="string">"＜font&nbsp;color=red＞"</span><span>+msg+</span><span class="string">"＜/font＞"</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>} &nbsp;&nbsp;</span>
    <li class="alt"><span>＜/script＞&nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<font color="#000000">&nbsp;index.html 中主要要做的就是写一个 form 和 iframe ，并把 form 的 target 设为 iframe 的名字，注意要把 iframe 设为不可见，其他的都是正常的<span class="hilite2"><span class="hilite2">文件上传</span></span>的写法，这样刷新的页面就是这个隐藏的 Iframe ，而在 index.html 中是不会有页面刷新的，js的 callback 方法是回调方法。用于清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框和显示后台信息，注意清空<span class="hilite2"><span class="hilite2">文件上传</span></span>框的方法，和普通方法有点不一样。</font><br />
<br />
--upload.jsp<br />
<div class="dp-highlighter">
<ol class="dp-j">
    <li class="alt"><span><span>＜%@&nbsp;page&nbsp;language=</span><span class="string">"<a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a>"</span><span>&nbsp;contentType=</span><span class="string">"text/html;&nbsp;charset=gb2312"</span><span>&nbsp;%＞ &nbsp;&nbsp;</span></span>
    <li class=""><span>＜%@&nbsp;page&nbsp;</span><span class="keyword">import</span><span>=</span><span class="string">"com.jspsmart.upload.SmartUpload"</span><span>%＞ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>＜% &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//新建一个SmartUpload对象 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;SmartUpload&nbsp;su&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;SmartUpload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传初始化 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.initialize(pageContext); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&nbsp;设定上传限制 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//1.限制每个上传文件的最大长度。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setMaxFileSize(</span><span class="number">10000000</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//2.限制总上传数据的长度。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setTotalMaxFileSize(</span><span class="number">20000000</span><span>); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//3.设定允许上传的文件（通过扩展名限制）,仅允许doc,txt文件。 </span><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;su.setAllowedFilesList(</span><span class="string">"doc,txt,jpg,rar,mid,waw,mp3,gif"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">boolean</span><span>&nbsp;sign&nbsp;=&nbsp;</span><span class="keyword">true</span><span>; &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//4.设定禁止上传的文件（通过扩展名限制）,禁止上传带有exe,bat,jsp,htm,html扩展名的文件和没有扩展名的文件。 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">try</span><span>&nbsp;{ &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.setDeniedFilesList(</span><span class="string">"exe,bat,jsp,htm,html"</span><span>); &nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//上传文件 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.upload(); &nbsp;&nbsp;</span>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//将上传文件保存到指定目录 </span><span>&nbsp;&nbsp;</span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;su.save(</span><span class="string">"c:\\"); </span>&nbsp;
    <li class="alt"><span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace(); </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sign&nbsp;=&nbsp;false; </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;} </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;if(sign==true) </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;success')＜/script＞</span><span class="string">"); </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;}else </span>&nbsp;</span>
    <li class=""><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;{ </span>&nbsp;</span>
    <li class="alt"><span><span class="string">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("</span><span>＜script＞parent.callback('upload&nbsp;file&nbsp;error')＜/script＞"); &nbsp;&nbsp;</span></span>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span>
    <li class="alt"><span>%＞ &nbsp;&nbsp;</span> </li>
</ol>
</div>
<br />
<br />
<br />
<br />
<font color="#000000">upload.jsp 中只要注意最后输出的格式就可以了。其实原理就是输出一段js代码到 iframe 中，然后在iframe中来控制它的父页面。<br />
<br />
&nbsp;&nbsp;&nbsp; OK，至此一个无刷新的页面上传组件就做好了，</font><font color="#800080"><font color="#000000">不要忘了在 WEB-INF/lib 下加上必须的 jspSmartUpload.jar 包</font></font><font color="#800080"><font color="#000000">。<br />
&nbsp;&nbsp;&nbsp; 需要说明的是使用Iframe来上传，状态栏还是会有刷新的，因为iframe 中的页面刷新了嘛，但是外部页面，就是你所看到的页面是没有刷新的，所以也可以说是类似<span class="hilite1"><span class="hilite1">Ajax</span></span>上传。</font></font></span><img src ="http://www.blogjava.net/rain1102/aggbug/187170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-19 10:23 <a href="http://www.blogjava.net/rain1102/articles/187170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax.Updater </title><link>http://www.blogjava.net/rain1102/articles/187055.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 18 Mar 2008 09:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/187055.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/187055.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/187055.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/187055.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/187055.html</trackback:ping><description><![CDATA[<h3>Syntax<code><br />
&nbsp; new Ajax.Updater(container, url, options);<br />
// make a HTTP request to the specified URL and update the 'container' element.<br />
</code></h3>
<p>Note: to only update a div on success, you may optionally substitute a property list for a simply element id (ie {success:&#8217;div_name&#8217;} instead of &#8216;div_name&#8217;)</p>
<h3>Options</h3>
<table>
    <tbody>
        <tr>
            <td>Option</td>
            <td>Default value</td>
            <td>Description</td>
        </tr>
        <tr>
            <td>asynchronous</td>
            <td>true</td>
            <td>Type of request</td>
        </tr>
        <tr>
            <td>evalScripts</td>
            <td>false</td>
            <td>When set as &#8220;true&#8221;, scripts in requested url are evaluated</td>
        </tr>
        <tr>
            <td>method</td>
            <td>&#8216;post&#8217;</td>
            <td>Lets you decide whether to use Get or Post for the request to the server</td>
        </tr>
        <tr>
            <td>contentType</td>
            <td>&#8216;application/x-www-form-urlencoded&#8217;</td>
            <td>Allows you to set the content-type sent to the server</td>
        </tr>
        <tr>
            <td>encoding</td>
            <td>&#8216;UTF-8&#8217;</td>
            <td>Allows you to determine the encoding type information given to the server</td>
        </tr>
        <tr>
            <td>parameters</td>
            <td>&#8217;&#8217;</td>
            <td>Allows you to attach parameters to your <span class="caps">AJAX</span> request. Most common: parameters:Form.serialize(this)</td>
        </tr>
        <tr>
            <td>postBody</td>
            <td>&#8217;&#8217;</td>
            <td>Specify data to post. Something like: postBody:&#8217;thisvar=true&amp;thatvar=Howdy&#8217; How does this differ from parameters?</td>
        </tr>
        <tr>
            <td>username</td>
            <td>&#8217;&#8217;</td>
        </tr>
        <tr>
            <td>password</td>
            <td>&#8217;&#8217;</td>
        </tr>
        <tr>
            <td>requestHeaders</td>
            <td>&#8217;&#8217;</td>
            <td>Allows you to override the headers, see the <a href="http://www.prototypejs.org/api/ajax/options">Prototype <span class="caps">AJAX</span> options</a> for details</td>
        </tr>
        <tr>
            <td>onComplete</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on completion of request</td>
        </tr>
        <tr>
            <td>onSuccess</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on successful completion of request</td>
        </tr>
        <tr>
            <td>onFailure</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on failed request</td>
        </tr>
        <tr>
            <td>onException</td>
            <td>&#8217;&#8217;</td>
            <td>Function to call on failed request (e.g. attempted cross-site request)</td>
        </tr>
        <tr>
            <td>on + Status Code</td>
            <td>&#8217;&#8217;</td>
            <td>on404 etc. raise an event when given status code is encountered.</td>
        </tr>
        <tr>
            <td>insertion</td>
            <td>None</td>
            <td>Instead of inserting the response in the existing content (possibly overwriting it) you can pass a valid Insertion object, such as Insertion.Top, Insertion.Bottom, Insertion.Before or Insertion.After.</td>
        </tr>
    </tbody>
</table>
<p>Hint: If you have set evalScripts:true the script you call (the url parameter) must return a header of &#8216;Content-Type: text/javascript&#8217; else the browser will not execute it.</p><img src ="http://www.blogjava.net/rain1102/aggbug/187055.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-03-18 17:49 <a href="http://www.blogjava.net/rain1102/articles/187055.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts 2中使用JSON Ajax支持</title><link>http://www.blogjava.net/rain1102/articles/180907.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 20 Feb 2008 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/180907.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/180907.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/180907.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/180907.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/180907.html</trackback:ping><description><![CDATA[JSON插件提供了一种名为json的ResultType，一旦为某个Action指定了一个类型为json的Result，则该Result无需映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的数据，并将该数据返回给客户端页面的JavaScript。
<p>　　简单地说，JSON插件允许我们在JavaScript中异步调用Action，而且Action不再需要使用视图资源来显示该Action里的状态信息，而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式，就可以完成Ajax交互。</p>
<p>　　Struts2提供了一种可插拔方式来管理插件，安装Struts2的JSON插件与安装普通插件并没有太大的区别，一样只需要将Struts2插件的JAR文件复制到Web应用的WEB-INF/lib路径下即可。</p>
<p>　　安装JSON插件按如下步骤进行：</p>
<p>　　(1)登陆http://code.google.com/p/jsonplugin/downloads/list站点，下载Struts2的JSON插件的最新版本，当前最新版本是0.7，我们可以下载该版本的JSON插件。</p>
<p>　　(2)将下载到的jsonplugin-0.7.jar文件复制到Web应用的WEB-INF路径下，即可完成JSON插件的安装。</p>
<p>　　<strong>实现Actio逻辑</strong></p>
<p>　　假设wo,en输入页面中包含了三个表单域，这三个表单域对于三个请求参数，因此应该使用Action来封装这三个请求参数。三个表单域的name分别为field1、field2和field3。</p>
<p>　　处理该请求的Action类代码如下：　　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">public&nbsp;class&nbsp;JSONExample <br />
            　　{ <br />
            　　//封装请求参数的三个属性 <br />
            　　private&nbsp;String&nbsp;field1; <br />
            　　private&nbsp;transient&nbsp;String&nbsp;field2; <br />
            　　private&nbsp;String&nbsp;field3; <br />
            　　//封装处理结果的属性 <br />
            　　private&nbsp;int[]&nbsp;ints&nbsp;=&nbsp;{10,&nbsp;20}; <br />
            　　private&nbsp;Map&nbsp;map&nbsp;=&nbsp;new&nbsp;HashMap(); <br />
            　　private&nbsp;String&nbsp;customName&nbsp;=&nbsp;"custom"; <br />
            　　//三个请求参数对应的setter和getter方法 <br />
            　　public&nbsp;String&nbsp;getField1() <br />
            　　{ <br />
            　　return&nbsp;field1; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setField1(String&nbsp;field1) <br />
            　　{ <br />
            　　this.field1&nbsp;=&nbsp;field1; <br />
            　　} <br />
            　　//此处省略了field1和field2两个字段的setter和getter方法 <br />
            　　... <br />
            　　//封装处理结果的属性的setter和getter方法 <br />
            　　public&nbsp;int[]&nbsp;getInts() <br />
            　　{ <br />
            　　return&nbsp;ints; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setInts(int[]&nbsp;ints) <br />
            　　{ <br />
            　　this.ints&nbsp;=&nbsp;ints; <br />
            　　} <br />
            　　public&nbsp;Map&nbsp;getMap() <br />
            　　{ <br />
            　　return&nbsp;map; <br />
            　　} <br />
            　　public&nbsp;void&nbsp;setMap(Map&nbsp;map) <br />
            　　{ <br />
            　　this.map&nbsp;=&nbsp;map; <br />
            　　} <br />
            　　//使用注释语法来改变该属性序列化后的属性名 <br />
            　　@JSON(name="newName") <br />
            　　public&nbsp;String&nbsp;getCustomName() <br />
            　　{ <br />
            　　return&nbsp;this.customName; <br />
            　　} <br />
            　　public&nbsp;String&nbsp;execute() <br />
            　　{ <br />
            　　map.put("name",&nbsp;"yeeku"); <br />
            　　return&nbsp;Action.SUCCESS; <br />
            　　} <br />
            　　}</td>
        </tr>
    </tbody>
</table>
　　在上面代码中，使用了JSON注释，注释时指定了name域，name域指定Action属性被序列化成JSON对象的属性名。除此之外，JSON注释还支持如下几个域：</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serialize：设置是否序列化该属性</p>
<p>　　deserialize：设置是否反序列化该属性。</p>
<p>　　format：设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。</p>
<p>　　配置该Action与配置普通Action存在小小的区别，应该为该Action配置类型为json的Result。而这个Result无需配置任何视图资源。</p>
<p>　　配置该Action的struts.xml文件代码如下：　
<table style="border-right: #cccccc 1px dotted; table-layout: fixed; border-top: #cccccc 1px dotted; border-left: #cccccc 1px dotted; border-bottom: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0">
    <tbody>
        <tr>
            <td style="word-wrap: break-word" bgcolor="#f3f3f3">＜?xml&nbsp;version="1.0"&nbsp;encoding="GBK"?＞ <br />
            ＜!DOCTYPE&nbsp;struts&nbsp;PUBLIC <br />
            "-//Apache&nbsp;Software&nbsp;Foundation//DTD&nbsp;Struts&nbsp;Configuration&nbsp;2.0//EN" <br />
            "http://struts.apache.org/dtds/struts-2.0.dtd"＞ <br />
            ＜struts＞ <br />
            ＜constant&nbsp;name="struts.i18n.encoding"&nbsp;value="UTF-8"/＞ <br />
            ＜package&nbsp;name="example"&nbsp;extends="json-default"＞ <br />
            ＜action&nbsp;name="JSONExample"&nbsp;class="lee.JSONExample"＞ <br />
            ＜result&nbsp;type="json"/＞ <br />
            ＜/action＞ <br />
            ＜/package＞ <br />
            ＜/struts＞　　</td>
        </tr>
    </tbody>
</table>
　　在上面配置文件中有两个值得注意的地方：<br />
<br />
　　第一个地方是配置struts.i18n.encoding常量时，不再是使用GBK编码，而是UTF-8编码，这是因为Ajax的POST请求都是以UTF-8的方式进行编码的。<br />
<br />
　　第二个地方是配置包时，自己的包继承了json-default包，而不再继承默认的default包，这是因为只有在该包下才有json类型的Result。</p><img src ="http://www.blogjava.net/rain1102/aggbug/180907.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-02-20 17:02 <a href="http://www.blogjava.net/rain1102/articles/180907.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JS常见的location及URL变量 </title><link>http://www.blogjava.net/rain1102/articles/174604.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 11 Jan 2008 05:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/174604.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/174604.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/174604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/174604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/174604.html</trackback:ping><description><![CDATA[<p>alert(location);<br />
alert(location.href);<br />
alert(location.search);<br />
alert(location.pathname);<br />
<br />
上面四个分别得到下面四个结果<br />
<br />
<a href="http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0">http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0</a><br />
http://www.baidu.com/s/abc/d?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0<br />
?ie=gb2312&amp;bs=baseURL&amp;sr=&amp;z=&amp;cl=3&amp;f=8&amp;wd=baseURL+IE+FF&amp;ct=0<br />
/s/abc/d </p><img src ="http://www.blogjava.net/rain1102/aggbug/174604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-11 13:29 <a href="http://www.blogjava.net/rain1102/articles/174604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaFX发现之旅：JavaFX Script With Eclipse 入门（第一部分）</title><link>http://www.blogjava.net/rain1102/articles/173978.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 09 Jan 2008 05:20:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/173978.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/173978.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/173978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/173978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/173978.html</trackback:ping><description><![CDATA[<a href="http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse" target="_blank">http://blog.eshangrao.com/index.php/2007/05/16/391-javafx-script-javafx-script-with-eclipse</a><img src ="http://www.blogjava.net/rain1102/aggbug/173978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2008-01-09 13:20 <a href="http://www.blogjava.net/rain1102/articles/173978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在dwr的回调函数中传递多个参数</title><link>http://www.blogjava.net/rain1102/articles/171357.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 28 Dec 2007 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/171357.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/171357.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/171357.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/171357.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/171357.html</trackback:ping><description><![CDATA[function selectCountry(countryId) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var num = countryId.indexOf("Country");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var prefix = countryId.substr(0,num);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var countryId = document.getElementById(countryId).value;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loveService.getProvincesByCountry(countryId, function(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #008000">callBackProvices(data,<span style="color: #ff0000">prefix</span>);<br />
</span>&nbsp;&nbsp;&nbsp;});<br />
&nbsp;&nbsp;&nbsp;resetProvince(prefix+"Province");<br />
&nbsp;&nbsp;&nbsp;resetCity(prefix+"City");<br />
&nbsp;&nbsp;}<br />
&nbsp;<br />
&nbsp;&nbsp;function <span style="color: #ff0000">callBackProvices(data, prefix)</span> {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var provinceId = prefix+'Province';<br />
&nbsp;&nbsp;&nbsp;DWRUtil.removeAllOptions(provinceId);<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, arrayObject, 'value', 'name');<br />
&nbsp;&nbsp;&nbsp;DWRUtil.addOptions(provinceId, data);<br />
&nbsp;&nbsp;}
<p>&nbsp;</p><img src ="http://www.blogjava.net/rain1102/aggbug/171357.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-12-28 23:42 <a href="http://www.blogjava.net/rain1102/articles/171357.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【教程】 jquery第一次亲密接触(转载)</title><link>http://www.blogjava.net/rain1102/articles/155641.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 24 Oct 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/155641.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/155641.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/155641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/155641.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/155641.html</trackback:ping><description><![CDATA[jquery是继prototype之后又一个优秀的Javascript框架。对prototype我使用不多，简单了解过。但使用上jquery之后，马上被她的优雅吸引住了。有人使用这样的一比喻来比较prototype和jquery：prototype就像Java，而jquery就像ruby.实际上我比较喜欢java（少接触Ruby罢了）但是jquery的简单的实用的确有相当大的吸引力啊！在项目里我把jquery作为自已唯一的框架类包。使用其间也有一点点心得，其实这些心得，在jquery的文档上面也可能有讲，不过还是记下来，以备忘罢。 <br />
一，找到你了！ <br />
还记得$()这个东西吧？prototype还是DWR都使用了这个函数代替document.getElementById()。没错，jquery也跟风了。为达到document.getElementById()的目的，jquery是这样写的： <br />
<br />
<br />
代码<br />
var someElement = $("#myId");&nbsp; <br />
<br />
<br />
看起来比其他两个框架的要多了一个#，好，看看下面的用法：<br />
<br />
<br />
代码<br />
$("div p");(1)&nbsp; <br />
$("div.container")(2)&nbsp; <br />
$("div #msg");(3)&nbsp; <br />
$("table a",context);(4)&nbsp; <br />
<br />
<br />
在prototype里看过这样的写法吗？第一行代码得到所有&lt;div&gt;标签下的&lt;p&gt;元素。第二行代码得到class为container的&lt;div&gt;元素,第三行代码得到&lt;div&gt;标签下面id为msg的元素。第四行代码得到context为上下文的table里面所有的连接元素。 <br />
如果你熟悉CSS，Xpath，你会觉得这些写法很眼熟！对了。正是。看出奥妙了吧。jquery就是通过这样的方式来找到Dom对象里面的元素。跟CSS的选择器相类似。 <br />
二，Jquery对象？ <br />
jquery提供了很多便利的函数，如each(fn)，但是使用这些函数的前提是：你使用的对象是Jquer对象。使一个Dom对象成为一个Jquery对象很简单，通过下面一些方式（只是一部分）： <br />
<br />
代码<br />
var a = $("#cid");(1)&nbsp; <br />
var b = $("&lt;p&gt;hello&lt;/p&gt;");(2)&nbsp; <br />
var c = document.createElement("table"); var tb = $(c);&nbsp; <br />
<br />
<br />
三，代替body标签的onload <br />
这个惯例，也许是除了$()之外，用得最多的地方了。下面一段代码： <br />
<br />
代码<br />
$(document).ready(function(){&nbsp; <br />
&nbsp; alert("hello");&nbsp; <br />
});(1)&nbsp; <br />
&nbsp; <br />
&lt;body onload="alert('hello');"&gt;（2）&nbsp; <br />
&nbsp; <br />
<br />
<br />
上面两段代码是等价的。但代码1的好处是做到表现和逻辑分离。并且可以在不同的js文件中做相同的操作，即$(document).ready(fn)可以在一个页面中重复出现，而不会冲突。基本上Jqeury的很多plugin都是利用这个特性，正因为这个特性，多个plugin共同使用起来，在初始化时不会发生冲突。 <br />
不管怎么说，这个惯例可以分离javascript与HTML。推荐使用。 <br />
四，事件机制 <br />
我大量使用的事件可能就是button的onclick了。以前习惯在input 元素上写onclick = "fn()",使用jquery可以使javascript代码与html代码分离，保持HTML的清洁，还可以很轻松地绑定事件，甚至你可以不知道&#8220;事件&#8221;这个名词。 <br />
<br />
代码<br />
$(document).ready(function(){&nbsp; <br />
&nbsp; $("#clear").click(function(){&nbsp; <br />
&nbsp; &nbsp; alert("i am about to clear the table");&nbsp; &nbsp; <br />
&nbsp; });&nbsp; <br />
&nbsp; $("form[0]").submit(validate);&nbsp; <br />
});&nbsp; <br />
function validate(){&nbsp; <br />
&nbsp; //do some form validation&nbsp; <br />
}&nbsp; <br />
<br />
<br />
五，同一函数实现set&amp;get <br />
<br />
代码<br />
$("#msg").html();&nbsp; <br />
$("#msg").html("hello");&nbsp; <br />
<br />
<br />
上面两行代码，调用了同样的函数。但结果却差别很大。 <br />
第一行是返回指定元素的HTML值，第二行则是将hello这串字符设置到指定元素中。jquery的函数大部分有这样的特性。 <br />
六，ajax <br />
这是一个ajax横行的时代。多少人，了不了解ajax的都跟着用上一把。呵。使用jquery实现ajax同样简单异常 <br />
<br />
代码<br />
$.get("search.do",{id:1},rend);&nbsp; <br />
function rend(xml){&nbsp; <br />
&nbsp; &nbsp; alert(xml);&nbsp; <br />
} (1)&nbsp; <br />
$.post("search.do",{id:1},rend);&nbsp; <br />
function rend(xml){&nbsp; <br />
&nbsp; &nbsp; alert(xml);&nbsp; <br />
} (2)&nbsp; <br />
&nbsp; <br />
$("#msg").ajaxStart(function(){&nbsp; <br />
&nbsp; this.html("正在加载。。。。");&nbsp; <br />
});(3)&nbsp; <br />
$("#msg").ajaxSuccess(function(){&nbsp; <br />
&nbsp; this.html("加载完成！");&nbsp; <br />
});(4)&nbsp; <br />
<br />
<br />
这些都是较常用的方法，get和post用法一样。第一个参数是异步请求的url，第二个为参数，第三个回调方法。 <br />
3，4的方法会在指定的Dom对象上绑定响应ajax执行的事件。当然，jquery的AJAX相关的函数不仅是这些，有兴趣可以去研究再多。 <br />
七，渐入淡出 <br />
<br />
代码<br />
$("#msg").fadeIn("fast");&nbsp; <br />
$("#msg").fadeOut("slow");&nbsp; <br />
<br />
<br />
没错，上面两行代码已经分别实现了一个id为Msg的jquery对象的渐入和淡出。做一个像Gmail一样的动态加载通知条，用jquery就那么简单。两个函数接受的参数除了快慢等，还可以接收整型，作为渐入或淡出的完成时间，单位为MS。 <br />
八，plugin <br />
这也是一个插件的时代。 <br />
jquery插件给我的感觉清一色的清洁，简单。如Jtip，要使用它的功能，只需要在你的元素的class上加上Jtip,并引入jtip.js及其样式即可以了。其他事情插件全包。我喜欢jquery的一个重要原因是发现她已经有了很多很好，很精彩的插件。<br />
<br />
写得很烂。可能大家看不出jquery的好处。嗯，光听是没用的，试用一下吧。你会发觉很有趣。 <br />
暂时告一段落吧。待有新的发现再来分享。<br />
<br />
加一些Jquery的资源： <br />
<a href="http://www.visualjquery.com/index.xml" target="_blank">http://www.visualjquery.com/index.xml</a> 很好的API查询站点 <br />
<a href="http://jquery.com/demo/thickbox/" target="_blank">http://jquery.com/demo/thickbox/</a> 知道lightBox吧，看看Jquery是怎样实现相同的东西 <br />
<a href="http://www.codylindley.com/blogstuff/js/jtip/" target="_blank">http://www.codylindley.com/blogstuff/js/jtip/</a> Jtip，实用的提示工具 <br />
<a href="http://jquery.com/plugins/" target="_blank">http://jquery.com/plugins/</a> 很多牛的插件。 <br />
<br />
<a href="http://15daysofjquery.com/" target="_blank">http://15daysofjquery.com</a><br /><img src ="http://www.blogjava.net/rain1102/aggbug/155641.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-10-24 17:23 <a href="http://www.blogjava.net/rain1102/articles/155641.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax-------IE和FIREFOX 脚本的一些区别</title><link>http://www.blogjava.net/rain1102/articles/96085.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Fri, 26 Jan 2007 01:51:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/96085.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/96085.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/96085.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/96085.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/96085.html</trackback:ping><description><![CDATA[<p>
				<font face="verdana, arial, helvetica" size="2">
						<span class="javascript" id="text6696983" style="FONT-SIZE: 12px">用AJAX开发 不可避免的要遇到浏览器不同，实现不同的问题，下面是AoiUmi的一些总结。<br /><br />1：innerText<br />IE支持，FIREFOX不支持<br />解决办法：用innerHTML,2种浏览器都识别innerHTML<br /><br />2：document.createElement<br />document.appendChild<br />在往表里插入行时<br />FIREFOX支持，IE不支持<br />解决办法：把行插入到TBODY中，不要直接插入到表<br /><br />3：setAttribute('style','color:red;')<br />FIREFOX支持(除了IE，现在所有浏览器都支持)，IE不支持<br />解决办法：不用setAttribute('style','color:red')<br />而用object.style.cssText = 'color:red;'(这写法也有例外)<br />最好的办法是上面种方法都用上，万无一失 ^_^<br />4:class<br />setAttribute('class','styleClass')<br />FIREFOX支持，IE不支持(指定属性名为CLASS，IE不会设置元素的CLASS属性，相反只使用SETATTRIBUTE时IE自动识别CLASSNAME属性)<br />解决办法：<br />setAttribute('class','styleClass')<br />setAttribute('className','styleClass')<br />2种都用上<br /><br />5:用setAttribute设置事件<br />var obj = document.getElementById('objId');<br />obj.setAttribute('onclick','funcitonname();');<br />FIREFOX支持，IE不支持<br />解决办法：<br />IE中必须用点记法来引用所需的事件处理程序,并且要用赋予匿名函数<br />如下：<br />var obj = document.getElementById('objId');<br />obj.onclick=function(){fucntionname();};<br />这种方法所有浏览器都支持<br /><br />6：建立单选钮<br />IE以外的浏览器<br />var rdo = document.createElement('input');<br />rdo.setAttribute('type','radio');<br />rdo.setAttribute('name','radiobtn');<br />rdo.setAttribute('value','checked');<br /><br />IE:<br />var rdo =document.createElement("&lt;input type='radio' name='radiobtn' value='checked'&gt;");<br />解决办法：<br />这一点区别和前面的都不一样。这次完全不同，所以找不到共同的办法来解决，那么只有IF-ELSE了<br />万幸的是，IE可以识别出document的uniqueID属性，别的浏览器都不可以识别出这一属性。问题解决。<br /><br />0：共同的一些技巧<br />在动态建立INPUT型输入元素时，一般是先加入，在设置TYPE。这就有可能出错<br /><br />好习惯：var btn = document.createElement('input');<br />btn.setAttribut('type','button');<br />document.getElementById('formId').appendChild(btn);</span>
				</font>
		</p><img src ="http://www.blogjava.net/rain1102/aggbug/96085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-26 09:51 <a href="http://www.blogjava.net/rain1102/articles/96085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.graphics.color &amp; dojo.uri.Uri</title><link>http://www.blogjava.net/rain1102/articles/94429.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94429.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94429.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94429.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94429.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94429.html</trackback:ping><description><![CDATA[模块：dojo.graphics.color
<p><br />下面是dojo里定义的颜色名称<br />dojo.graphics.color.named.white //白色<br />dojo.graphics.color.named.black //黑色<br />dojo.graphics.color.named.red //红色<br />dojo.graphics.color.named.green //绿色<br />dojo.graphics.color.named.blue //蓝色<br />dojo.graphics.color.named.navy //海军蓝<br />dojo.graphics.color.named.gray //灰色<br />dojo.graphics.color.named.silver//银色</p><p><br />dojo.graphics.color.Color</p><p>颜色类</p><p><br />Usage Example:</p><p><br />var color = new dojo.graphics.color.Color(dojo.graphics.color.named.black); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color(0,0,0); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color(0,0,0,1.0); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color([0,0,0,1.0]); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color('rgb(0,0,0)'); //定义一个黑色的颜色对象<br />var color = new dojo.graphics.color.Color('#000000'); //定义一个黑色的颜色对象</p><p><br /><br />dojo.graphics.color.Color.toRgb</p><p><br />Usage Example:</p><p><br />color.toRgb();  //返回一个[0,0,0]的数组<br />color.toRgb(true); //返回一个[0,0,0,1.0]的数组</p><p><br /><br />dojo.graphics.color.Color.toRgba</p><p><br />Usage Example:</p><p><br />color.toRgba();  //返回一个[0,0,0,1.0]的数组</p><p><br /><br />dojo.graphics.color.Color.toHex<br />dojo.graphics.color.Color.toString</p><p><br />Usage Example:</p><p><br />color.toHex();  //返回"#000000"<br />color.toString(); //返回"#000000"</p><p><br /><br />dojo.graphics.color.Color.toCss</p><p><br />Usage Example:</p><p><br />color.toCss();  //返回"rgb(0,0,0)"</p><p><br /><br />dojo.graphics.color.Color.blend</p><p><br />混合另一个颜色得到一个新颜色</p><p><br />Usage Example:<br /><br />color.blend('#ffffff', 1); //返回[255,255,255]<br />color.blend('#ffffff', -1); //返回[0,0,0]<br />color.blend('#ffffff', 0); //按1比1混合黑色和白色，返回[127,127,127]<br />颜色参数可以为颜色的任意形式，比如数组，字符串等</p><p><br />or</p><p><br />dojo.graphics.color.blend([0,0,0], [255,255,255], 0); //will return [127,127,127]<br />dojo.graphics.color.blend("#000000", "#ffffff", 0); //will return "#7f7f7f"<br />若第一个参数为字符串，则返回值也会返回字符串</p><p><br /><br />dojo.graphics.color.Color.blendHex</p><p><br />Usage Example:</p><p><br />dojo.graphics.color.blendHex("#000000", "#ffffff", 0); //will return "#7f7f7f"</p><p><br /><br />dojo.graphics.color.extractRGB</p><p><br />将输入转换为RGB数组</p><p><br />dojo.graphics.color.hex2rgb</p><p><br />将输入的字符串转换为RGB数组</p><p><br />dojo.graphics.color.rgb2hex</p><p><br />将输入的RGB数组转换为字符串</p><p><br /><br />dojo.graphics.color.Color.fromArray</p><p><br />Usage Example:</p><p><br />var color = dojo.graphics.color.Color.fromArray([0,0,0,1.0]);</p><p><br /><br />模块：dojo.uri.Uri</p><p><br />dojo.uri.Uri</p><p><br />专门用来处理URI(统一资源标识符)的类</p><p><br />Usage Example:</p><p><br />uri = (new dojo.uri.Uri("<a href="http://myserver/dojo/"><font color="#003366">http://myserver/dojo/</font></a>", "guide.html")).toString(); //uri will be "<a href="http://myserver/dojo/guide.html"><font color="#003366">http://myserver/dojo/guide.html</font></a>"<br />uri = (new dojo.uri.Uri("<a href="http://myserver/dojo/"><font color="#003366">http://myserver/dojo/</font></a>", "../guide.html")).toString(); //uri will be "<a href="http://myserver/guide.html"><font color="#003366">http://myserver/guide.html</font></a>"</p><p><br />RFC规定的URI语法：[scheme:][//authority][path][?query][#fragment]<br />authority语法：[user-info@]host[:port]</p><p><br />比如我们定义一个uri<br /><br />var uri = new dojo.uri.Uri("<a href="http://user:password@myserver/dojo/"><font color="#003366">http://user:password@myserver:80/dojo/</font></a>", "guide.html?page=1#top");</p><p><br />则uri的属性如下：</p><p><br />authority: 服务器名 "user:password@myserver:80"<br />fragment: 片断名 "top"<br />host: 主机名 "myserver"<br />password: 密码 "password"<br />path: 路径 "/dojo/guide.html"<br />port: 端口 80<br />query: 参数 "page=1"<br />scheme: 模式 "http"<br />uri: 完整的地址 "<a href="http://user:password@myserver/dojo/guide.html?page=1"><font color="#003366">http://user:password@myserver:80/dojo/guide.html?page=1</font></a>"<br />user: 用户名 "user:" 似乎有点问题，多了一个冒号<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94429.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 15:34 <a href="http://www.blogjava.net/rain1102/articles/94429.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.event &amp; dojo.event.topic &amp; dojo.event.browser</title><link>http://www.blogjava.net/rain1102/articles/94424.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94424.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94424.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94424.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94424.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94424.html</trackback:ping><description><![CDATA[<p>模块：dojo.event</p>
		<p>终于进入有名的dojo事件处理系统的学习了，学习前建议读者先去补习一下AOP的相关知识</p>
		<p>dojo.event.connect</p>
		<p>绑定指定的方法到指定的对象的方法上</p>
		<p>Usage Example:</p>
		<p>简单绑定1</p>
		<p>function doOnClick1()<br />{<br /> alert("Clicked!");<br />}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick","doOnClick1");</p>
		<p>简单绑定2</p>
		<p>obj = { doOnClick2: function(){ alert("Clicked!");}}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");</p>
		<p>如果存在需要进行多个事件的绑定的时候，你就会看到dojo的方便之处了</p>
		<p>obj2 = { doOnClick2: function(){alert("Clicked!");}}<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj,"doOnClick2");<br />dojo.event.connect(dojo.byId("inputTest"),"onclick",obj2,"doOnClick2");</p>
		<p>connect可以对任何对象的方法进行绑定，而不是只能针对DOM对象</p>
		<p>dojo.event.connect(obj,"doOnclick2","doOnClick1"); //在调用obj.doOnclick2()后调用doOnClick1()</p>
		<p>
				<br />dojo.event.connectBefore</p>
		<p>dojo.event.connect默认是后绑定，connectBefore则是早绑定，绑定的方法将在指定方法前执行，用法与connect一致</p>
		<p>
				<br />dojo.event.connectAround</p>
		<p>Usage Example:</p>
		<p>function aroundTest(invocation){<br />  //此处可以增加代码，比如检查参数(invocation.args)<br />  var result = invocation.proceed();<br />  //此处可以增加代码，比如修改结果(result)<br />  return result;<br />}<br />dojo.event.connectAround(dojo.byId("inputTest"),"onclick","aroundTest");</p>
		<p>
				<br />dojo.event.connectOnce<br />说起这个函数，还真的是让我想了半天，直觉上我就把它想象成executeOnce，结果测试的结果让我差点想不通<br />connectOnce就是指保证只绑定一次，来避免重复绑定会导致的重复执行的问题</p>
		<p>
				<br />dojo.event.disconnect</p>
		<p>解除绑定，调用参数与connect一致，即可解除之前的绑定操作</p>
		<p>
				<br />dojo.event.log</p>
		<p>在执行指定对象的指定方法后自动记录日志</p>
		<p>Usage Example:</p>
		<p>dojo.event.log(obj, "doOnClick"); //当调用obj.doOnClick时记录下日志"DEBUG:  ([object Object]).doOnClick : "</p>
		<p>你也可以这样写：</p>
		<p>dojo.event.log({srcObj: obj, srcFunc: "doOnClick"});</p>
		<p>
				<br />dojo.event.kwConnect</p>
		<p>kwConnect可以做到更加灵活的绑定，比如可以设置延迟执行绑定</p>
		<p>Usage Example:</p>
		<p>dojo.event.kwConnect({<br />  srcObj: dojo.byId("inputTest"),<br />  srcFunc: "onclick",<br />  adviceObj: obj,<br />  adviceFunc: "doOnclick2",</p>
		<p>  type: "before", //默认为"after"，可选: "before", "around"，注意：type是用来决定adviceFunc的行为的，如果为"around"，则aroundFunc将失效<br />  aroundObj: null,<br />  aroundFunc: null, //如果指定了aroundFunc，则其将对adviceFunc进行拦截，但是当type为"around"时，则aroundFunc将不会执行<br />  once: false, //默认为false，允许重复绑定<br />  delay: 3000, //延时3秒后执行adviceFunc<br />  rate: 0, //这个从源代码没有看懂起什么作用<br />  adviceMsg: false //这个从源代码没有看懂起什么作用<br />});</p>
		<p>
				<br />dojo.event.kwDisconnect</p>
		<p>用来解除使用kwConnect指定的绑定</p>
		<p>
				<br />模块：dojo.event.topic</p>
		<p>Topic机制与Advice机制都能够实现事件的绑定，但是显然,Topic更适合处理多重绑定。<br />发布主题，然后由用户订阅的机制就是一个典型的观察者模式</p>
		<p>dojo.event.topic.registerPublisher</p>
		<p>注册主题发布器</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.registerPublisher("myTopic", obj, "doOnClick2");</p>
		<p>
				<br />dojo.event.topic.subscribe</p>
		<p>订阅主题</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.subscribe("myTopic", "test"); //执行obj.doOnClick2()以后会自动执行test()</p>
		<p>
				<br />dojo.event.topic.unsubscribe</p>
		<p>取消订阅主题</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.unsubscribe("myTopic", "test");</p>
		<p>
				<br />dojo.event.topic.destroy</p>
		<p>删除主题，此主题所有的订阅都将失效</p>
		<p>Usage Example:</p>
		<p>dojo.event.topic.destroy("myTopic");</p>
		<p>
				<br />模块：dojo.event.browser</p>
		<p>dojo.event.browser.addListener</p>
		<p>增加监听器</p>
		<p>Usage Example:</p>
		<p>function listener()<br />{<br />  alert("ok");<br />}<br />dojo.event.browser.addListener(document, 'mousedown', listener); //事件名称可以加上"on"，也可以没有"on"<br />dojo.event.browser.addListener(document, 'onmousedown', listener, true); //capture为真表示不受上层元素的事件控制</p>
		<p>
				<br />dojo.event.browser.removeListener</p>
		<p>清除监听器(这个方法似乎是无效的)</p>
		<p>
				<br />dojo.event.browser.callListener</p>
		<p>调用监听器</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.callListener(listener, document);</p>
		<p>
				<br />dojo.event.browser.stopPropagation</p>
		<p>阻止Event传播</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.stopPropagation();</p>
		<p>
				<br />dojo.event.browser.preventDefault</p>
		<p>将当前事件的返回值设置为false</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.preventDefault();</p>
		<p>
				<br />dojo.event.browser.keys</p>
		<p>键定义:<br />  KEY_BACKSPACE: 8,<br />  KEY_TAB: 9,<br />  KEY_ENTER: 13,<br />  KEY_SHIFT: 16,<br />  KEY_CTRL: 17,<br />  KEY_ALT: 18,<br />  KEY_PAUSE: 19,<br />  KEY_CAPS_LOCK: 20,<br />  KEY_ESCAPE: 27,<br />  KEY_SPACE: 32,<br />  KEY_PAGE_UP: 33,<br />  KEY_PAGE_DOWN: 34,<br />  KEY_END: 35,<br />  KEY_HOME: 36,<br />  KEY_LEFT_ARROW: 37,<br />  KEY_UP_ARROW: 38,<br />  KEY_RIGHT_ARROW: 39,<br />  KEY_DOWN_ARROW: 40,<br />  KEY_INSERT: 45,<br />  KEY_DELETE: 46,<br />  KEY_LEFT_WINDOW: 91,<br />  KEY_RIGHT_WINDOW: 92,<br />  KEY_SELECT: 93,<br />  KEY_F1: 112,<br />  KEY_F2: 113,<br />  KEY_F3: 114,<br />  KEY_F4: 115,<br />  KEY_F5: 116,<br />  KEY_F6: 117,<br />  KEY_F7: 118,<br />  KEY_F8: 119,<br />  KEY_F9: 120,<br />  KEY_F10: 121,<br />  KEY_F11: 122,<br />  KEY_F12: 123,<br />  KEY_NUM_LOCK: 144,<br />  KEY_SCROLL_LOCK: 145</p>
		<p>
				<br />dojo.event.browser.currentEvent</p>
		<p>最近一次的Event，其属性包括：</p>
		<p>altKey  //检查alt键的状态，当alt键按下时，值为 true<br />button  //检查按下的鼠标键，0 没按键，1 按左键，2 按右键，3 按左右键，4 按中间键，5 按左键和中间键，6 按右键和中间键，7 按所有的键<br />  //这个属性仅用于onmousedown, onmouseup, 和 onmousemove 事件。对其他事件，不管鼠标状态如何，都返回 0（比如onclick）<br />clientX  //返回鼠标在窗口客户区域中的X坐标<br />clientY  //返回鼠标在窗口客户区域中的Y坐标<br />ctrlKey  //检查ctrl键的状态，当ctrl键按下时，值为 true <br />fromElement //检测 onmouseover 和 onmouseout 事件发生时，鼠标所离开的元素<br />keyCode  //检测键盘事件相对应的内码，仅当type为keydown,keyup,keypress时才有效<br />offsetX  //检查相对于触发事件的对象，鼠标位置的水平坐标<br />offsetY  //检查相对于触发事件的对象，鼠标位置的垂直坐标<br />propertyName //设置或返回元素的变化了的属性的名称，你可以通过使用 onpropertychange 事件，得到 propertyName 的值<br />screenX  //检测鼠标相对于用户屏幕的水平位置<br />screenY  //检测鼠标相对于用户屏幕的垂直位置<br />shiftKey //检查shift键的状态，当shift键按下时，值为true<br />srcElement //返回触发事件的元素<br />srcFilter //返回触发 onfilterchange 事件的滤镜<br />toElement //检测 onmouseover 和 onmouseout 事件发生时，鼠标所进入的元素<br />type  //返回没有“on”作为前缀的事件名，比如click, mousedown<br />x  //返回鼠标相对于css属性中有position属性的上级元素的x轴坐标。如果没有css属性中有position属性的上级元素，默认以BODY元素作为参考对象<br />y  //返回鼠标相对于css属性中有position属性的上级元素的y轴坐标。如果没有css属性中有position属性的上级元素，默认以BODY元素作为参考对象<br />target  //同srcElement<br />currentTarget<br />layerX  //同offsetX<br />layerY  //同offsetY<br />pageX  //无水平滚动条的情况下与clientX同<br />pageY  //无水平滚动条的情况下与clientY同<br />relatedTarget // 仅当type为mouseover,mouseout时才有效<br />keys  //与dojo.event.browser.keys相同，仅当type为keydown,keyup,keypress时才有效<br />charCode //键值，仅当type为keypress时才有效</p>
		<p>
				<br />dojo.event.browser.isEvent</p>
		<p>判断指定对象是否为event对象</p>
		<p>Usage Example:</p>
		<p>dojo.event.browser.isEvent(dojo.event.browser.currentEvent); //当dojo.event.browser.currentEvent不为null时返回true<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 15:26 <a href="http://www.blogjava.net/rain1102/articles/94424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.dom</title><link>http://www.blogjava.net/rain1102/articles/94391.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94391.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94391.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94391.html</trackback:ping><description><![CDATA[<p>模块：dojo.dom</p>
		<p>dojo.dom.isNode</p>
		<p>测试指定对象是否为节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.isNode(dojo.byId('edtTitle'));</p>
		<p>
				<br />dojo.dom.getUniqueId</p>
		<p>取得唯一id</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getUniqueId();  //will return dj_unique_#</p>
		<p>
				<br />dojo.dom.firstElement = dojo.dom.getFirstChildElement</p>
		<p>取得指定节点下的第一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.firstElement(parentNode, 'SPAN');</p>
		<p>
				<br />dojo.dom.lastElement = dojo.dom.getLastChildElement</p>
		<p>取得指定节点下的最后一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.lastElement(parentNode, 'SPAN');</p>
		<p>
				<br />dojo.dom.nextElement = dojo.dom.getNextSiblingElement</p>
		<p>取得指定节点的下一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.nextElement(node, 'SPAN');</p>
		<p>
				<br />dojo.dom.prevElement = dojo.dom.getPreviousSiblingElement</p>
		<p>取得指定节点的前一个满足指定Tag条件的子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.prevElement(node, 'SPAN');</p>
		<p>
				<br />dojo.dom.moveChildren</p>
		<p>把指定节点下的所有子节点移动到目标节点下，并返回移动的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(srcNode, destNode, true); //仅移动子节点，srcNode中的文字将被丢弃<br />dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被移动到目标节点下</p>
		<p>
				<br />dojo.dom.copyChildren</p>
		<p>把指定节点下的所有子节点复制到目标节点下，并返回复制的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(srcNode, destNode, true); //仅复制子节点，srcNode中的文字将被忽略<br />dojo.dom.moveChildren(srcNode, destNode, false);//包括文字和子节点都将被复制到目标节点下</p>
		<p>
				<br />dojo.dom.removeChildren</p>
		<p>删除指定节点下的所有子节点，并返回删除的节点数</p>
		<p>Usage Example:</p>
		<p>dojo.dom.moveChildren(node);</p>
		<p>
				<br />dojo.dom.replaceChildren</p>
		<p>用指定的新节点替换父节点下的所有子节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.replaceChildren(node, newChild); //目前还不支持newChild为数组形式</p>
		<p>
				<br />dojo.dom.removeNode</p>
		<p>删除指定的节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.removeNode(node);</p>
		<p>
				<br />dojo.dom.getAncestors</p>
		<p>返回指定节点的父节点集合</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getAncestors(node, null, false); //返回所有的父节点集合（包括指定的节点node）<br />dojo.dom.getAncestors(node, null, true); //返回最近的一个父节点<br />dojo.dom.getAncestors(node, function(el){/* 此处增加过滤条件 */return true}, false); //返回所有满足条件的父节点集合</p>
		<p>
				<br />dojo.dom.getAncestorsByTag</p>
		<p>返回所有符合指定Tag的指定节点的父节点集合</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getAncestorsByTag(node, 'span', false); //返回所有的类型为SPAN的父节点集合<br />dojo.dom.getAncestorsByTag(node, 'span', true);  //返回最近的一个类型为SPAN的父节点</p>
		<p>
				<br />dojo.dom.getFirstAncestorByTag</p>
		<p>返回最近的一个符合指定Tag的指定节点的父节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.getFirstAncestorByTag(node, 'span'); //返回最近的一个类型为SPAN的父节点</p>
		<p>
				<br />dojo.dom.isDescendantOf</p>
		<p>判断指定的节点是否为另一个节点的子孙</p>
		<p>Usage Example:</p>
		<p>dojo.dom.isDescendantOf(node, ancestor, true); //判断node是否为ancestor的子孙<br />dojo.dom.isDescendantOf(node, node, false); //will return true<br />dojo.dom.isDescendantOf(node, node, true); //will return false</p>
		<p>
				<br />dojo.dom.innerXML</p>
		<p>返回指定节点的XML</p>
		<p>Usage Example:</p>
		<p>dojo.dom.innerXML(node);</p>
		<p>
				<br />dojo.dom.createDocument</p>
		<p>创建一个空的文档对象</p>
		<p>Usage Example:</p>
		<p>dojo.dom.createDocument();</p>
		<p>
				<br />dojo.dom.createDocumentFromText</p>
		<p>根据文字创建一个文档对象</p>
		<p>Usage Example:</p>
		<p>dojo.dom.createDocumentFromText('&lt;?xml version="1.0" encoding="gb2312" ?&gt;&lt;a&gt;1&lt;/a&gt;','text/xml');</p>
		<p>
				<br />dojo.dom.prependChild</p>
		<p>将指定的节点插入到父节点的最前面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.prependChild(node, parent);</p>
		<p>
				<br />dojo.dom.insertBefore</p>
		<p>将指定的节点插入到参考节点的前面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertBefore(node, ref, false); //如果满足要求的话就直接退出<br />dojo.dom.insertBefore(node, ref, true);</p>
		<p>
				<br />dojo.dom.insertAfter</p>
		<p>将指定的节点插入到参考节点的后面</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAfter(node, ref, false); //如果满足要求的话就直接退出<br />dojo.dom.insertAfter(node, ref, true);</p>
		<p>
				<br />dojo.dom.insertAtPosition</p>
		<p>将指定的节点插入到参考节点的指定位置</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAtPosition(node, ref, "before");//参考节点之前<br />dojo.dom.insertAtPosition(node, ref, "after"); //参考节点之后<br />dojo.dom.insertAtPosition(node, ref, "first"); //参考节点的第一个子节点<br />dojo.dom.insertAtPosition(node, ref, "last");  //参考节点的最后一个子节点<br />dojo.dom.insertAtPosition(node, ref); //默认位置为"last"</p>
		<p>
				<br />dojo.dom.insertAtIndex</p>
		<p>将指定的节点插入到参考节点的子节点中的指定索引的位置</p>
		<p>Usage Example:</p>
		<p>dojo.dom.insertAtIndex(node, containingNode, 3);  //把node插入到containingNode的子节点中，使其成为第3个子节点</p>
		<p>
				<br />dojo.dom.textContent</p>
		<p>设置或获取指定节点的文本</p>
		<p>Usage Example:</p>
		<p>dojo.dom.textContent(node, 'text'); //设置node的文本为'text'<br />dojo.dom.textContent(node); //返回node的文本</p>
		<p>
				<br />dojo.dom.hasParent</p>
		<p>判断指定节点是否有父节点</p>
		<p>Usage Example:</p>
		<p>dojo.dom.hasParent(node);</p>
		<p>
				<br />dojo.dom.isTag</p>
		<p>判断节点是否具有指定的tag</p>
		<p>Usage Example:</p>
		<p>var el = document.createElement("SPAN");<br />dojo.dom.isTag(el, "SPAN"); //will return "SPAN"<br />dojo.dom.isTag(el, "span"); //will return ""<br />dojo.dom.isTag(el, "INPUT", "SPAN", "IMG"); //will return "SPAN"<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:36 <a href="http://www.blogjava.net/rain1102/articles/94391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.io.IO &amp; dojo.io.BrowserIO</title><link>http://www.blogjava.net/rain1102/articles/94388.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:28:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94388.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94388.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94388.html</trackback:ping><description><![CDATA[<p>模块：dojo.io.IO<br /><br />dojo.io.bind</p>
		<p>
				<br />处理请求取回需要的数据并处理</p>
		<p> </p>
		<p>这个函数是AJAX中最为重要和有用的函数，dojo.io.bind这个类是用来处理客户端与服务器间通讯的，需要通讯的参数由对象dojo.io.Request所定义，具体通讯的方法则由另外一个对象Transport所提供。</p>
		<p> </p>
		<p>因此，我们如果需要与服务器通讯，则应该定义一个Request对象，其中包括服务器地址及回调函数，例子中Requset都是以匿名对象方式定义的</p>
		<p>
				<br />虽然我们可以定义一个自己的Transport，但是显然不如直接利用现成的Transport方便。</p>
		<p>
				<br />Dojo里提供了一个同时兼容IE和Firefox的dojo.io.XMLHTTPTransport，但是这个对象位于dojo.io.BrowserIO，因此，一般require dojo.io.IO时，还应该require dojo.io.BrowserIO</p>
		<p> </p>
		<p>Usage Example:</p>
		<p>  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype，默认为 "text/plain"<br />    method："GET", //默认为"GET"<br />    sync: false, //默认为异步执行<br />    useCache: false, //默认为不使用页面缓存，注意这里的缓存并不是浏览器的缓存，而是Dojo自身所维护的页面缓存<br />    preventCache: false, //默认为启用浏览器缓存，否则将通过自动增加不同的参数来确保浏览器缓存失效<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br />  你也可以用一个handle来处理所有的事件</p>
		<p> </p>
		<p>  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    handle: function(type, data, evt){<br />      if(type == "load") { alert(data); } //data is that we wanted<br />      else if (type == "error") { alert(data.message); } //data is the error object<br />      else { ; } //other events maybe need handled<br />    }<br />  });<br />  <br />  如果没有在Request中指定所用的transport，则Dojo会自动的在已注册的transports中寻找能够处理这个Request的transport，如果不能找到，则返回指定的Request。下面是一个指定了transport的例子:</p>
		<p>
				<br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.html"><font color="#003366">http://localhost/test.html</font></a>", //要请求的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    transport: "XMLHTTPTransport",</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br />  你还可以利用bind来得到一个JavaScript所定义的对象（注意mimetype必须要定义为"text/javascript"）</p>
		<p> </p>
		<p>  testObj = dojo.io.bind({<br />    url: "<a href="http://localhost/test.js"><font color="#003366">http://localhost/test.js</font></a>", //test.js里定义了一个对象<br />    mimetype: "text/javascript", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    handle: function(type, data, evt){<br />      if(type == "load") { alert(data); } //data is a object or value<br />      else if (type == "error") { alert(data.message); } //data is the error object<br />      else { ; } //other events maybe need handled<br />    }<br />  });<br />  <br />  下面是一个Post的例子:<br />  <br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.aspx"><font color="#003366">http://localhost/test.aspx</font></a>", //要提交的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    method: "POST",<br />    formNode: dojo.byId("myForm"), //指定提交的Form名称</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p> </p>
		<p>  另一个Post的例子(without Form to post):</p>
		<p>
				<br />  dojo.io.bind({<br />    url: "<a href="http://localhost/test.aspx"><font color="#003366">http://localhost/test.aspx</font></a>", //要提交的页面地址<br />    mimetype: "text/html", //请求的页面的类型，应该设置为与你请求页面类型对应的mimetype<br />    timeoutSeconds: 3000,  //3秒后超时，如果为0则永不超时<br />    method: "POST",<br />    content: {a: 1, b: 2}, //要提交的数据</p>
		<p>    load: function(type, data, evt) { alert(data); }, //type should be "load", data is that we wanted<br />    error: function(type, error) { alert(error.message); }, //error is dojo.io.Error<br />    timeout: function(type) { alert("请求超时！"); }<br />  });</p>
		<p>
				<br /> </p>
		<p>dojo.io.queueBind</p>
		<p>
				<br />  有时，我们需要一次发出多个网页请求，则应该使用dojo.io.queueBind，因为浏览器可能只允许同时发出有限个数的请求，如果是使用dojo.io.bind的话，则有可能会申请不到新的XMLHttp对象而导致出错。<br /><br />  用法与dojo.io.bind是一样的。</p>
		<p>
				<br /> </p>
		<p>dojo.io.argsFromMap</p>
		<p>
				<br />  用来把对象转换为URL的参数形式<br />  <br />Usage Example:</p>
		<p>
				<br />  dojo.io.argsFromMap({a:1,b:2,c:3}); //will return "c=3&amp;b=2&amp;a=1"<br />  dojo.io.argsFromMap({name:"名称",value:"值"},"utf"); //will return "value=%E5%80%BC&amp;name=%E5%90%8D%E7%A7%B0", 有中文的话应该指定utf格式，否则dojo.string.encodeAscii返回的编码是很怪异的<br />  dojo.io.argsFromMap({a:1,b:2,c:3}, "utf", "c"); //will return "b=2&amp;a=1&amp;c=3"，最后一个参数可以控制指定名称的值出现在最后<br />  </p>
		<p> </p>
		<p>dojo.io.setIFrameSrc</p>
		<p>
				<br />  设置IFrame的Src<br />  <br />Usage Example:</p>
		<p> </p>
		<p>  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "<a href="http://localhost/test.htm"><font color="#003366">http://localhost/test.htm</font></a>"); //myFrame打开指定的网页<br />  dojo.io.setIFrameSrc(dojo.byId("myFrame"), "<a href="http://localhost/test.htm"><font color="#003366">http://localhost/test.htm</font></a>", true); //myFrame打开指定的网页，并覆盖浏览器的历史记录</p>
		<p>
				<br /> </p>
		<p>TODO: 补充一个kwArgs的例子，我之前在网上看见过，可是现在无论如何也找不到相关的页面了，只好以后在举例了</p>
		<p> </p>
		<p>
				<br />模块：dojo.io.BrowserIO</p>
		<p> </p>
		<p>基本上就提供了dojo.io.XMLHTTPTransport这个对象</p>
		<p>
				<br />XMLHTTPTransport一般能够满足我们的需求，但是其有几个限制：它不能传输文件，不能够成功执行跨域名的远程请求，并且不支持 file:// 这样的协议</p>
		<p>
				<br />因此，根据应用要求，我们可能会需要选用其它的transport: dojo.io.IframeTransport, dojo.io.repubsubTranport, dojo.io.ScriptSrcTransport, ShortBusTransport</p>
		<p> </p>
		<p>dojo.io.IframeTransport，用法与xmlhttp是一样的，其优点就是可以跨域，不存在任何的安全问题<br />如果Request指定的mimetype是text或javascript，返回的内容应该是放在第一个textarea里的内容，如果指定的mimetype是html，则IFrame里的html则是需要的内容。因为浏览器兼容的原因，IframeTransport不能正确处理返回类型为XML的请求。 </p>
		<p> </p>
		<p>关于Rpc，这个类似于Remoting的东西，也将在以后对其进行介绍。<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/94388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:28 <a href="http://www.blogjava.net/rain1102/articles/94388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.lang.array &amp; dojo.lang.func &amp; dojo.string.extras</title><link>http://www.blogjava.net/rain1102/articles/94383.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:18:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94383.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94383.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94383.html</trackback:ping><description><![CDATA[模块：dojo.lang.array<br /><br />dojo.lang.has<br />判断对象是否具有指定属性，不过这个方法有用吗，不如直接使用 if(name in obj)<br />Usage Example:<br />  dojo.lang.has(dojo.lang, "has"); //will return true<br /><br />dojo.lang.isEmpty<br />判断对象或数组是否为空<br />Usage Example:<br />  dojo.lang.isEmpty({a: 1}); //will return false<br />  dojo.lang.isEmpty([]); //will return true<br /><br />dojo.lang.map<br />调用指定的方法处理指定的数组或字符串<br />Usage Example:<br />  dojo.lang.map([1,2,3,4,5], function(x) { return x * x;}); //will return [1,4,9,16,25]<br /><br />dojo.lang.forEach<br />遍历指定的数组或字符串，并对其中的元素调用指定的方法<br />Usage Example:<br />  dojo.lang.forEach("abc", function(x) { alert(x); });<br /><br />dojo.lang.every<br />检查指定的数组是否全部满足指定方法的条件<br />Usage Example:<br />  dojo.lang.every([1,-2,3], function(x) { return x &gt; 0; }); //指定的数组不是全大于0的，因此返回false<br /><br />dojo.lang.some<br />检查指定的数组是否部分满足指定方法的条件<br />Usage Example:<br />  dojo.lang.some([1,-2,3], function(x) { return x &gt; 0; }); //指定的数组有大于0的元素，因此返回true<br /><br />dojo.lang.filter<br />根据指定的方法来过滤指定的数组<br />Usage Example:<br />  dojo.lang.filter([1,-2,3], function(x) { return x &gt; 0; }); //will return [1, 3]<br /><br />dojo.lang.unnest<br />把指定的参数或数组转换为一维数组<br />Usage Example:<br />  dojo.lang.unnest(1, 2, 3);  //will return [1, 2, 3]<br />  dojo.lang.unnest(1, [2, [3], [{4}]]); //will return [1, 2, 3, 4]<br /><br />dojo.lang.toArray<br />将输入转换为数组<br />Usage Example:<br />  function test()<br />  {<br />    return dojo.lang.toArray(arguments, 1);<br />  }<br />  test(1,2,3,4,5); //will return [2,3,4,5]<br /><br />模块：dojo.lang.func<br />dojo.lang.hitch<br />将指定的方法挂在指定的对象下并返回该方法<br />Usage Example:<br />  func = {test: function(s) {alert(s)}};<br />  dojo.lang.mixin(func, {demo: dojo.lang.hitch(func, "test")});<br />  func.demo("demo and test are same method");<br /><br />dojo.lang.forward<br />返回自身对象的指定名称的方法引用<br />Usage Example:<br />  func = {test: function(s) {alert(s)}, demo: dojo.lang.forward("test")};<br />  func.demo("demo and test are same method");<br /><br />dojo.lang.curry<br />What is curry? 请参阅这篇文章：<a href="http://www.svendtofte.com/code/curried_javascript/" target="_blank"><font color="#003366">http://www.svendtofte.com/code/curried_javascript/</font></a><br />Usage Example:<br />  function add(a, b)<br />  {<br />    return a + b;<br />  }<br />  dojo.lang.curry(null, add, 2, 3); //will return 5<br />  dojo.lang.curry(null, add, 2)(3); //will return 5<br />  dojo.lang.curry(null, add)(2)(3); //will return 5<br />  dojo.lang.curry(null, add)()(2)(3); //will return 5<br /><br />dojo.lang.curryArguments<br />与dojo.lang.curry类似，但是可以选择忽略掉前n个参数<br />Usage Example:<br />  function add(a, b)<br />  {<br />    return a + b;<br />  }<br />  dojo.lang.curryArguments(null, add, [1,2,3,4,5], 2); //will return 5 (= 2 + 3)<br />  <br />dojo.lang.tryThese<br />测试参数指定所有函数，并返回第一个返回值不为0的函数值<br />from seno: <br />dojo.lang.tryThese方法和prototype中的Try.these()方法是一样的， <br />xmlNode.text在一些浏览器中好用，但是xmlNode.textContent在另一些浏览器中正常工作。 使用Try.these()方法我们可以得到正常工作的那个方法的返回值。 <br />&lt;script&gt; <br />function getXmlNodeValue(xmlNode){ <br />return Try.these( <br />function() {return xmlNode.text;}, <br />function() {return xmlNode.textContent;) <br />); <br />} <br /><br />dojo.lang.delayThese<br />dojo.lang.delayThese的用法是： <br />function(/*Array*/farr, /*Function, optional*/cb, /*Integer*/delay, /*Function, optional*/onend) <br />根据delay指定的延迟，依次调用farr里面的方法，如果指定了cb，则调用完方法后调用cb。当farr中所有的方法都调用了之后，调用onend。<br /><br />模块：dojo.string.extras<br /><br />dojo.string.substituteParams<br />类似C#中的String.Format函数<br />%{name}要保证与传入的对象的名称大小写一致，否则会出异常<br />Usage Example:<br />  dojo.string.substituteParams("%{0} - %{1} - %{2}", "a", "b", "c"); //will return "a - b - c"<br />  dojo.string.substituteParams("%{name}: %{value}", {name:"名称",value:"值"}); //will return "名称: 值"<br /><br />dojo.string.capitalize<br />把每一个单词的首字母大写<br />Usage Example:<br />  dojo.string.capitalize("show me love"); //will return "Show Me Love"<br /><br />dojo.string.isBlank<br />判断输入字符串是否为空或全是空白字符，如果传入对象为非字符串则也会返回true<br />Usage Example:<br />  dojo.string.isBlank("   1   "); //will return false<br /><br />dojo.string.escape<br />参数1为type，可传值为: xml/html/xhtml, sql, regexp/regex, javascript/jscript/js, ascii<br />将按照所传type对字符串进行编码<br />Usage Example:<br />  dojo.string.escape("html", "&lt;input type='text' value='' /&gt;"); //will return "&amp;lt;input <br />type='text' value='' /&amp;gt;"<br /><br />dojo.string.encodeAscii<br />dojo.string.escapeXml<br />dojo.string.escapeSql<br />dojo.string.escapeRegExp<br />dojo.string.escapeJavaScript<br />dojo.string.escapeString<br />这些函数也就是 dojo.string.escape 所调用的，这里无需多说<br /><br />dojo.string.summary<br />取得输入字符串的缩略版本<br />Usage Example:<br />  dojo.string.summary("1234567890", 5); //will return "12345..."<br /><br />dojo.string.endsWith<br />判断输入字符串是否以指定的字符串结尾<br />Usage Example:<br />  dojo.string.endsWith("abcde", "E");  //will return false<br />  dojo.string.endsWith("abcde", "E", true); //will return true<br /><br />dojo.string.endsWithAny<br />判断输入字符串是否以指定的任意字符串结尾<br />Usage Example:<br />  dojo.string.endsWithAny("abcde", "E", "e"); //will return true<br /><br />dojo.string.startsWith<br />判断输入字符串是否以指定的字符串开头<br />Usage Example:<br />  dojo.string.startsWith("abcde", "A");  //will return false<br />  dojo.string.startsWith("abcde", "A", true); //will return true<br /><br />dojo.string.startsWithAny<br />判断输入字符串是否以指定的任意字符串开头<br />Usage Example:<br />  dojo.string.startsWithAny("abcde", "A", "a"); //will return true<br /><br />dojo.string.has<br />判断输入字符串是否含有任意指定的字符串<br />Usage Example:<br />  dojo.string.has("abcde", "1", "23", "abc"); //will return true<br /><br />dojo.string.normalizeNewlines<br />按要求转换回车换行的格式<br />Usage Example:<br />  dojo.string.normalizeNewlines("a\r\nb\r\n", "\r"); //will return "a\rb\r"<br /><br />dojo.string.splitEscaped<br />将字符串按分隔符转换为数组<br />Usage Example:<br />  dojo.string.splitEscaped("a\\_b_c", '_'); //will return ["a\\_b", "c"]<img src ="http://www.blogjava.net/rain1102/aggbug/94383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:18 <a href="http://www.blogjava.net/rain1102/articles/94383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dojo.string &amp; dojo.lang</title><link>http://www.blogjava.net/rain1102/articles/94380.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94380.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94380.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94380.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94380.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94380.html</trackback:ping><description><![CDATA[<pre>
				<strong>模块：dojo.string.common / dojo.string</strong>
dojo.string.common 和 dojo.string 是一样的，只要require其中一个就可以使用以下方法
<strong>dojo.string.trim</strong>
去掉字符串的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trim(s);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc "</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.trim(s, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return " abc"</span></div></pre>
		<pre>
				<strong>dojo.string.trimStart</strong>
去掉字符串开头的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trimStart(s);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "abc "</span></div><strong>dojo.string.trimEnd</strong>
去掉字符串结尾的空白
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> abc </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.string.trimEnd(s);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return " abc"</span></div><strong>dojo.string.repeat</strong>
生成由同一字符(串)重复组成的字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.repeat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "aaaa"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.repeat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1234</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "1234-1234-1234"</span></div><strong>dojo.string.pad</strong>
使用字符补齐字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.string.pad(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "100000"</span></div><strong>dojo.string.padLeft</strong>
使用字符补齐字符串开头
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.padLeft(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "000100"</span></div><strong>dojo.string.padRight</strong>
使用字符补齐字符串结尾
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.string.padRight(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "100000"</span></div><br /><br /><br /></pre>
		<pre>
				<strong>模块：dojo.lang.common / dojo.lang</strong>
dojo.lang.common 和 dojo.lang 是一样的，只要require其中一个就可以使用以下方法</pre>
		<pre>
				<strong>dojo.lang.mixin</strong>
将一个对象的方法和属性增加到另一个对象上
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_9_70_Open_Image" onclick="this.style.display='none'; Codehighlighter1_9_70_Open_Text.style.display='none'; Codehighlighter1_9_70_Closed_Image.style.display='inline'; Codehighlighter1_9_70_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s1 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_9_70_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span><span style="COLOR: #000000">{name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">TestObj</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, test1: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_44_69_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_44_69_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is test1!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span><br /><img id="Codehighlighter1_81_138_Open_Image" onclick="this.style.display='none'; Codehighlighter1_81_138_Open_Text.style.display='none'; Codehighlighter1_81_138_Closed_Image.style.display='inline'; Codehighlighter1_81_138_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> s2 </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_81_138_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_81_138_Open_Text"><span style="COLOR: #000000">{value: </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, test2: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_112_137_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_112_137_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">this is test2!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_148_149_Open_Image" onclick="this.style.display='none'; Codehighlighter1_148_149_Open_Text.style.display='none'; Codehighlighter1_148_149_Closed_Image.style.display='inline'; Codehighlighter1_148_149_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> d </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span id="Codehighlighter1_148_149_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_148_149_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.mixin(d, s1, s2); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">执行后d就具备了s1和s2的所有属性和方法</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">d.test1();</span></div><strong>dojo.lang.extend</strong>
为指定类的原型扩展方法与属性
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><strong><img id="Codehighlighter1_23_24_Open_Image" onclick="this.style.display='none'; Codehighlighter1_23_24_Open_Text.style.display='none'; Codehighlighter1_23_24_Closed_Image.style.display='inline'; Codehighlighter1_23_24_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></strong><span style="COLOR: #000000">TestClass </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() </span><span id="Codehighlighter1_23_24_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_23_24_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">;<br /><img id="Codehighlighter1_55_103_Open_Image" onclick="this.style.display='none'; Codehighlighter1_55_103_Open_Text.style.display='none'; Codehighlighter1_55_103_Closed_Image.style.display='inline'; Codehighlighter1_55_103_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />dojo.lang.extend(TestClass, </span><span id="Codehighlighter1_55_103_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_55_103_Open_Text"><span style="COLOR: #000000">{name: </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">demo</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, test: </span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_86_102_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_86_102_Open_Text"><span style="COLOR: #000000">{alert(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Test!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);}</span></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> o </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> TestClass();  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TestClass本来是没有test方法的，但是extend以后就有test方法了</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">o.test();</span></div><strong>dojo.lang.find=dojo.lang.indexOf</strong>
查找指定对象在指定数组中的位置
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);                  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return -1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.find(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span></div><strong>dojo.lang.findLast=dojo.lang.lastIndexOf
</strong>查找指定对象在指定数组中的位置，从后往前查
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.findLast(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);                  </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return -1</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.findLast(arr, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 4</span></div><strong>dojo.lang.inArray</strong>
查找指定对象是否在指定数组中
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> arr </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> [</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">];<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.inArray(arr, </span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.inArray(arr, </span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isObject</strong>
判断输入的类型是否为对象
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isObject(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> String());      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isObject(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isArray</strong>
判断输入的类型是否为数组
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_18_26_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_26_Open_Text.style.display='none'; Codehighlighter1_18_26_Closed_Image.style.display='inline'; Codehighlighter1_18_26_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isArray(</span><span id="Codehighlighter1_18_26_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_18_26_Open_Text"><span style="COLOR: #000000">{a:</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,b:</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isArray([</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">]);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isFunction</strong>
判断输入的类型是否为函数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_32_33_Open_Image" onclick="this.style.display='none'; Codehighlighter1_32_33_Open_Text.style.display='none'; Codehighlighter1_32_33_Closed_Image.style.display='inline'; Codehighlighter1_32_33_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isFunction(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">() </span><span id="Codehighlighter1_32_33_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_32_33_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isString</strong>
判断输入的类型是否为字符串
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isString(</span><span style="COLOR: #000000">""</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.isString(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return false</span></div><strong>dojo.lang.isAlien</strong>
判断输入的类型是否为系统函数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isAlien(isNaN);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong>dojo.lang.isBoolean</strong>
判断输入的类型是否为布尔类型
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.isBoolean(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><strong><br />dojo.lang.isNumber</strong>
判断输入的类型是否为数值，根据注释所说，此函数使用不太可靠，但是可替换使用的系统函数isNaN也不太可靠<br /><strong><br />dojo.lang.isUndefined</strong>
判断输入是否为未定义，根据注释所说，此函数有可能会导致抛出异常，推荐使用 typeof foo == "undefined" 来判断</pre>
		<pre>
				<strong>
						<br />模块：dojo.lang.extras</strong>
				<strong>dojo.lang.setTimeout</strong>
延迟指定时间后执行指定方法
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000"> onTime(msg)<br /><img id="Codehighlighter1_21_39_Open_Image" onclick="this.style.display='none'; Codehighlighter1_21_39_Open_Text.style.display='none'; Codehighlighter1_21_39_Closed_Image.style.display='inline'; Codehighlighter1_21_39_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /></span><span id="Codehighlighter1_21_39_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_21_39_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />dojo.debug(msg)<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.setTimeout(onTime, </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1秒后会输出调试信息"test"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">dojo.lang.setTimeout(dojo, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">debug</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">1000</span><span style="COLOR: #000000">, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">test</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">1秒后会输出调试信息"test"</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span></div><strong>dojo.lang.getNameInObj</strong>
获得指定项目在指定对象中的名称
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.lang.getNameInObj(dojo, dojo.debug);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return "debug"</span></div><strong>dojo.lang.shallowCopy</strong>
返回指定对象的浅表复制副本
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_22_23_Open_Image" onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">dojo.lang.shallowCopy(</span><span id="Codehighlighter1_22_23_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_22_23_Open_Text"><span style="COLOR: #000000">{}</span></span><span style="COLOR: #000000">);    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return a 空对象</span></div><strong>dojo.lang.firstValued</strong>
返回第一个存在定义的参数
Usage Example:
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">var</span><span style="COLOR: #000000"> a;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.lang.firstValued(a,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">);      </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return 2</span></div></pre><img src ="http://www.blogjava.net/rain1102/aggbug/94380.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 11:02 <a href="http://www.blogjava.net/rain1102/articles/94380.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo之djConfig解说</title><link>http://www.blogjava.net/rain1102/articles/94367.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 02:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94367.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94367.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94367.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94367.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94367.html</trackback:ping><description><![CDATA[djConfig是dojo内置的一个全局设置对象，其作用是可以通过其控制dojo的行为<br /><br />首先我们需要在引用dojo.js前声明djConfig对象，以便在加载dojo.js的时候才能够取得所设置的值，虽然在0.3版本以后dojo支持在加载后设置，但是强烈建议你把声明djConfig的代码作为第一段script<br /><br />一个完整的djConfig对象定义如下（值均为dojo的默认值）
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee" twffan="done"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" twffan="done" /><span style="COLOR: #000000" twffan="done">&lt;</span><span style="COLOR: #000000" twffan="done">script type</span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">text/javascript</span><span style="COLOR: #000000" twffan="done">"</span><span style="COLOR: #000000" twffan="done">&gt;</span><span style="COLOR: #000000" twffan="done"><br /><img id="Codehighlighter1_47_297_Open_Image" onclick="this.style.display='none'; Codehighlighter1_47_297_Open_Text.style.display='none'; Codehighlighter1_47_297_Closed_Image.style.display='inline'; Codehighlighter1_47_297_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" twffan="done" /></span><span style="COLOR: #0000ff" twffan="done">var</span><span style="COLOR: #000000" twffan="done"> djConfig </span><span style="COLOR: #000000" twffan="done">=</span><span style="COLOR: #000000" twffan="done"> </span><span id="Codehighlighter1_47_297_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff" twffan="done"></span><span id="Codehighlighter1_47_297_Open_Text" twffan="done"><span style="COLOR: #000000" twffan="done">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    isDebug: </span><span style="COLOR: #0000ff" twffan="done">false</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    debugContainerId: </span><span style="COLOR: #000000" twffan="done">""</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    bindEncoding: "",<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    allowQueryConfig: </span><span style="COLOR: #0000ff" twffan="done">false</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    baseScriptUri: </span><span style="COLOR: #000000" twffan="done">""</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    parseWidgets: </span><span style="COLOR: #0000ff" twffan="done">true</span><span style="COLOR: #000000" twffan="done"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    searchIds: [],<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    baseRelativePath: </span><span style="COLOR: #000000" twffan="done">""</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    libraryScriptUri: </span><span style="COLOR: #000000" twffan="done">""</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    iePreventClobber: </span><span style="COLOR: #0000ff" twffan="done">false</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    ieClobberMinimal: </span><span style="COLOR: #0000ff" twffan="done">true</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" twffan="done" />    preventBackButtonFix: </span><span style="COLOR: #0000ff" twffan="done">true</span><span style="COLOR: #000000" twffan="done">,<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" twffan="done" />}</span></span><span style="COLOR: #000000" twffan="done">;<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" twffan="done" /></span><span style="COLOR: #000000" twffan="done">&lt;/</span><span style="COLOR: #000000" twffan="done">script</span><span style="COLOR: #000000" twffan="done">&gt;</span></div><p>isDebug是一个很有用的属性，顾名思义，如果设置为真，则所有dojo.Debug的输出有效，开发时应该设置为true，发布时应该设置为false<br /><br />debugContainerId同样也是与调试有关的，如果不指定的话，调试信息将会直接利用 document.write输出，这样可能会破坏页面的整体布局，所以你可以指定任何一个可以作为容器的html元素的id作为调试信息输出容器<br /><br />allowQueryConfig，这个属性指明 dojo是否允许从页面url的参数中读取djConfig中的相关属性，当值为true时，dojo会优先从url参数中读取djConfig的其他属性，比如: <a href="http://server/dojoDemo.htm?djConfig.debugContainerId=divDebug"><font color="#999966">http://server/dojoDemo.htm?djConfig.debugContainerId=divDebug</font></a><br /><br />baseScriptUri，一般不需要设置，dojo会自动根据你引用dojo.js的路径设置这个值，比如，&lt;script type="text/javascript" src="../dojo/dojo.js"&gt;&lt;/script&gt;，自动获取的值便是 ../dojo/<br />ps: 如果你有多个工程需要同时引用dojo.js的话，建议也把dojo当作一个独立的工程，引用的时候采用绝对路径就可以了<br /><br />parseWidgets，这个是可以控制dojo是否自动解析具有dojoType的html元素为对应的widget，如果你没有使用任何Widget，建议设置为false以加快dojo的加载速度<br /><br />searchIds，这是一个字符串数组，定义了所有需要解析为widget的html元素的ID，如果ID不在其中的html元素是不会被解析的，当数组为空数组时，则所有具有dojoType的元素都会被解析<br /><br />还有一个bindEncoding，是用来设置默认的bind请求的编码方式<br /><br />至于其它的属性，不是用处不大，就是不知道有什么作用<br /><br />在实际开发中，可以把djConfig的定义放在一个js文件里，并将其作为第一个引用的js文件，这样应该是最方便的。</p><img src ="http://www.blogjava.net/rain1102/aggbug/94367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 10:21 <a href="http://www.blogjava.net/rain1102/articles/94367.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Dojo的基础对象和方法</title><link>http://www.blogjava.net/rain1102/articles/94366.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 17 Jan 2007 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/94366.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/94366.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/94366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/94366.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/94366.html</trackback:ping><description><![CDATA[这里所说的基础对象和方法是指的不Require任何包就能够调用的对象和方法
<p><b>匿名函数</b></p><p>在开始前，我想介绍一下js里的匿名函数，这个在阅读dojo的源代码的时候，会发现到处都有匿名函数</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id="Codehighlighter1_12_26_Open_Image" onclick="this.style.display='none'; Codehighlighter1_12_26_Open_Text.style.display='none'; Codehighlighter1_12_26_Closed_Image.style.display='inline'; Codehighlighter1_12_26_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><span style="COLOR: #000000">;(</span><span style="COLOR: #0000ff">function</span><span style="COLOR: #000000">()</span><span id="Codehighlighter1_12_26_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_12_26_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />alert(</span><span style="COLOR: #000000">123</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000">)();<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">前面的分号是一个空语句，是可以不要的</span></div><p>匿名函数。一个匿名函数就是一个没有名字的函数。</p><p>你可以认为他们是一次性函数。当你只需要用一次某个函数时，他们就特别有用。通过使用匿名函数，没有必要把函数一直放在内存中，所以使用匿名函数更加有效率。</p><p>当然你也可以根本不定义函数，但是使用匿名函数可以把你的代码分段，就像C#中的#region一样</p><p><b>dojo.byId</b></p><p>非常有用的一个方法，与prototype.js的著名的$一样</p><p>似乎以前的版本还有dojo.byIdArray, 不过最新的版本已经找不到这个函数了(除了src\compat\0.2.2.js)</p><p>如果有多个元素具有指定的id，则返回的是一个集合</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">divTest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> dojo.byId(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">divTest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, document);<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> dojo.byId(document.getElementById(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">divTest</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));</span></div><p> </p><p><b>dojo.version</b></p><p>dojo的版本，可以取得major, minor, patch, flag和revision</p><p>这个对象没什么太大用处，除非你要根据dojo的版本选择执行你的代码</p><p><b>dojo.raise</b></p><p>抛出一个异常</p><p><b>dojo.errorToString</b></p><p>将异常转换为字符串</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">try</span><span style="COLOR: #000000"><br /><img id="Codehighlighter1_6_53_Open_Image" onclick="this.style.display='none'; Codehighlighter1_6_53_Open_Text.style.display='none'; Codehighlighter1_6_53_Closed_Image.style.display='inline'; Codehighlighter1_6_53_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> </span><span id="Codehighlighter1_6_53_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_6_53_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    dojo.raise(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">打印失败</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> Error(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">文件不存在</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /> </span><span style="COLOR: #0000ff">catch</span><span style="COLOR: #000000">(e)<br /><img id="Codehighlighter1_66_103_Open_Image" onclick="this.style.display='none'; Codehighlighter1_66_103_Open_Text.style.display='none'; Codehighlighter1_66_103_Closed_Image.style.display='inline'; Codehighlighter1_66_103_Closed_Text.style.display='inline';" src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /> </span><span id="Codehighlighter1_66_103_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_66_103_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif" align="top" />    alert(dojo.errorToString(e));<br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /> }</span></span></div><p> </p><p><b>dojo.render</b></p><p>系统环境对象</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">dojo.render.name     返回 browser ，说明是工作在浏览器下<br />dojo.render.ver        返回 4</span><span style="COLOR: #000000"> ，似乎没什么用<br />dojo.os.win            返回true说明操作系统是Windows<br />dojo.os.linux           返回true说明操作系统是Linux<br />dojo.os.osx            返回true说明操作系统是MacOS<br />dojo.html.ie             返回true说明浏览器是Internet Explorer<br />dojo.html.opera             返回true说明浏览器是Opera<br />dojo.html.khtml             返回true说明浏览器是Konqueror<br />dojo.html.safari      返回true说明浏览器是Safari<br />dojo.html.moz        返回true说明浏览器是Mozilla FireFox<br />dojo.svg.capable     返回true说明浏览器支持svg<br />dojo.vml.capable     返回true说明浏览器支持vml<br />dojo.swf.capable    返回true说明浏览器支持swf<br />dojo.swt.capable     返回true说明浏览器支持swt (IBM开发的Standard Widget Toolkit)</span></div><p>如果dojo.html.ie为true的话</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">dojo.html.ie50         返回true说明浏览器是IE </span><span style="COLOR: #000000">5.0</span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.html.ie55         返回true说明浏览器是IE </span><span style="COLOR: #000000">5.5</span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.html.ie60         返回true说明浏览器是IE </span><span style="COLOR: #000000">6.0</span><span style="COLOR: #000000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />dojo.html.ie70         返回true说明浏览器是IE </span><span style="COLOR: #000000">7.0</span></div><p> </p><p><b>dojo.addOnLoad</b></p><p>可以加载指定函数到window.load时执行，好处就是可以很方便的在window.load时执行多个函数</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.addOnLoad(init);                    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">init是一个函数</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> dojo.addOnLoad(myObject, init);       </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">init是myObject对象的一个方法</span></div><p> </p><p><b>dojo.require</b></p><p>如果你想调用一个模块的对象的时候，你应该首先用dojo.require来请求这个模块，dojo会根据你的请求自动取得相应的js文件，并加载到内存中，这样你才能调用或创建其中的对象</p><p>dojo会自动维护已加载的模块列表，所以是不会重复加载模块的</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.require(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dojo.event</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><p><b>dojo.requireIf=dojo.requireAfterIf</b></p><p>可以根据指定的条件来决定是否加载指定的模块</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.requireIf(dojo.html.ie, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dojo.html</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);   </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">如果dojo.html.ie为true，才会加载dojo.html模块</span></div><p> </p><p><b>dojo.provide</b></p><p>除非你要开发自己的模块，不然是用不到这个方法的，你可以这句看成是向系统注册这个模块名称</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.provide(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dojo.custom</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><p><strong>dojo.exists</strong></p><p>判断指定对象是否具有指定名称的方法</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.exists(dojo, </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">exists</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">will return true</span></div><p> </p><p><b>dojo.hostenv.getText</b></p><p>返回指定url的内容</p><p>PS: 由于浏览器的安全限制，因此只能用于取得同域名的url的内容，否则会报告权限不够</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> aSync </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">同步，确保返回内容不为null</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> silent </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">不抛出错误</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> s </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> dojo.hostenv.getText(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">http://www.google.com/</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, aSync, silent); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回Google的首页的HTML</span><span style="COLOR: #008000"><br /><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"> alert(s);</span></div><p><b>dojo.debug</b></p><p>输出调试信息，如果在djConfig中指定了debugContainerId，则输出到指定的console容器中，否则直接document.write</p><p>所有的调试信息均以 DEBUG: 开头</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.debug(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">这是调试信息</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><p> </p><p><b>dojo.hostenv.println</b></p><p>与dojo.debug类似，不同的是，输出内容没有 DEBUG:</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.hostenv.println(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">这是一般的输出信息</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);</span></div><p> </p><p><b>dojo.debugShallow</b></p><p>输出指定对象的全部信息(Shallow说明并不会遍历到下一级别的对象属性)以供调试</p><p>Usage Example:</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000"> dojo.debugShallow(dojo.render.html);</span></div><img src ="http://www.blogjava.net/rain1102/aggbug/94366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2007-01-17 10:20 <a href="http://www.blogjava.net/rain1102/articles/94366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR文档之util.js (转载)</title><link>http://www.blogjava.net/rain1102/articles/76920.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 24 Oct 2006 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/76920.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/76920.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/76920.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/76920.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/76920.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US" style="FONT-SIZE: 11pt">DWR</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档之</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">util.js <br />Filed under: AJAX, DWR — Jet @ 3:26 pm  <br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">原文出处</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: <a href="http://www.javatang.com/archives/2006/04/26/261321.html" target="_blank">http://www.javatang.com/archives/2006/04/26/261321.html</a><br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">翻译</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: Jet Mah <br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">声明</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">请维持文章的完整性任意转载</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">
						<br />
						<br />util.js <br /><br />util.js</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">包含许多工具类函数</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">, </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些函数可以协助你在网页中使用</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">javascript</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">数据</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这些数据可能是从服务器短返回的</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">). <br /><br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因为是不依赖</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">DWR</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">,</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以你可以在</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">DWR</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之外使用这些函数</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">. </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你即可以同</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">DWR</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">一起下载它</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">, </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也可以单独下载</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">. <br /><br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">四个基础的操作函数</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: getValue[s]()</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">setValue[s]()</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用于除表格</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(tables)</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、列表</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(lists)</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和图像</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(images)</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之外的</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">HTML</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">元素中</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">. getText()</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">使用于下拉列表中</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(select lists). <br /><br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编辑表格可参考</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">addRows()</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">removeAllRows(). </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编辑列表</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">(select lists </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt"> ul, ol lists)</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">可参考</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">addOptions() </span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">和</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">removeAllOptions(). <br /><br />$()  <br />addOptions and removeAllOptions  <br />addRows and removeAllRows  <br />getText  <br />getValue  <br />getValues  <br />onReturn  <br />selectRange  <br />setValue  <br />setValues  <br />toDescriptiveString  <br />useLoadingMessage  <br /></span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">英文出处</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: <br /><a href="http://getahead.ltd.uk/dwr/browser/util" target="_blank"><font color="#261cdc">http://getahead.ltd.uk/dwr/browser/util</font></a><br />DWR</span>
				<span style="FONT-SIZE: 11pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">文档翻译文档列表</span>
				<span lang="EN-US" style="FONT-SIZE: 11pt">: <br /><a href="http://www.javatang.com/dwr-chinese-documents/" target="_blank">http://www.javatang.com/dwr-chinese-documents/</a><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span>
		</p><img src ="http://www.blogjava.net/rain1102/aggbug/76920.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-24 11:02 <a href="http://www.blogjava.net/rain1102/articles/76920.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>图片新闻</title><link>http://www.blogjava.net/rain1102/articles/75609.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 17 Oct 2006 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/75609.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/75609.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/75609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/75609.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/75609.html</trackback:ping><description><![CDATA[<p>&lt;style type="text/css"&gt;<br />&lt;!--<br />body <br />{<br /> margin-left: 0px;<br /> margin-top: 0px;<br /> margin-right: 0px;<br /> margin-bottom: 0px;<br /> background-image: url(images/bg_page.gif);<br />}<br />--&gt;<br />&lt;/style&gt;<br />&lt;link href="Style_all.css" rel="stylesheet" type="text/css" /&gt;<br />&lt;script type='text/javascript' src='/dwr/interface/DWRIndex.js'&gt;&lt;/script&gt;<br />&lt;script type='text/javascript' src='/dwr/engine.js'&gt;&lt;/script&gt;<br />&lt;script type='text/javascript' src='/dwr/util.js'&gt;&lt;/script&gt;</p>
		<p>&lt;STYLE type="text/css"&gt;<br />      #imgTitle<br />      {<br />       FILTER: ALPHA(opacity=70); LEFT: 0px; OVERFLOW: hidden; POSITION: relative; TEXT-ALIGN: left<br />      }</p>
		<p>      #imgTitle_up<br />      {<br />       LEFT: 0px; HEIGHT: 1px; TEXT-ALIGN: left<br />      }<br />      #imgTitle_down<br />      {<br />       LEFT: 0px; TEXT-ALIGN: right<br />      }<br />         <br />      .imgClass<br />      {<br />       BORDER-RIGHT: gray 1px solid; BORDER-TOP: gray 1px solid; BORDER-LEFT: gray 1px solid; BORDER-BOTTOM: gray 0px solid<br />      }<br />      #txtFrom<br />      {<br />       VERTICAL-ALIGN: middle; TEXT-ALIGN: center<br />      }<br />      .button<br />      {<br />       PADDING-RIGHT: 0px; PADDING-LEFT: 0px; BACKGROUND: #7b7b63; PADDING-BOTTOM: 0px; MARGIN: 0px; FONT: bold 9px sans-serif; BORDER-LEFT: #fff 1px solid; PADDING-TOP: 0px; TEXT-DECORATION: none;width:20;<br />      }<br />      A.button<br />      {<br />       COLOR: #ffffff; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #000000; TEXT-DECORATION: none<br />      }<br />      A.button:link<br />      {<br />       COLOR: #ffffff; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #000000; TEXT-DECORATION: none<br />      }<br />      A.button:visited<br />      {<br />       COLOR: #ffffff; FONT-FAMILY: sans-serif; BACKGROUND-COLOR: #000000; TEXT-DECORATION: none<br />      }<br />      A.button:hover<br />      {<br />       BACKGROUND: #fff; COLOR: #fff; FONT-FAMILY: sans-serif; TEXT-DECORATION: none<br />      }<br />      .buttonDiv<br />      {<br />       BACKGROUND: #000000; FLOAT: left; VERTICAL-ALIGN: middle; WIDTH: 21px; HEIGHT: 1px; TEXT-ALIGN: center<br />      }<br />      .trans<br />      {<br />       FILTER: progid:DXImageTransform.Microsoft.Alpha(startX=0, startY=0, finishX=100, finishY=100,style=1,opacity=0,finishOpacity=40); WIDTH: 90px; BACKGROUND-COLOR: #000<br />      }<br />      &lt;/STYLE&gt;</p>
		<p>     &lt;SCRIPT language="javascript" type="text/javascript"&gt;<br />     var imgWidth=199;              //图片宽<br />     var imgHeight=139;             //图片高<br />     var textFromHeight=0;         //焦点字框高度 (单位为px)<br />     var textStyle="f12";           //焦点字class style (不是连接class)<br />     var textLinkStyle="p1"; //焦点字连接class style<br />     var buttonLineOn="#f60";           //button下划线on的颜色<br />     var buttonLineOff="#000";          //button下划线off的颜色<br />     var TimeOut=5000;              //每张图切换时间 (单位毫秒);<br />     var imgUrl=new Array(); <br />     var imgLink=new Array();<br />     var imgtext=new Array();<br />     var imgAlt=new Array();<br />                    var adNum=0;<br />                            <br />                    <br />                    var topcount=5;<br />                    var ItemID=430;<br />                    <br />                    function rebackAlt(){<br />                    <br />                    }<br />                    function setAlt(data){<br />           <br />                       for(var i=1;i&lt;=topcount;i++){<br />                        imgAlt[i]=data[i-1];<br />                       }<br />                    }<br />                    function setTitle(data){<br />                       for(var i=1;i&lt;=topcount;i++){<br />                        imgtext[i]=data[i-1];<br />                       }<br />                       <br />                    }<br />     function setLink(data){<br />        <br />        for(var i=1;i&lt;=topcount;i++){<br />                        imgLink[i]=data[i-1];<br />                       }<br />     }<br />     function setbContent(data){<br />        <br />        for(var i=1;i&lt;=topcount;i++){<br />                        imgUrl[i]=data[i-1];<br />                       }<br />     }<br />     <br />     //焦点字框高度样式表 开始<br />     document.write('&lt;style type="text/css"&gt;');<br />     document.write('#focuseFrom{width:'+(imgWidth+2)+';margin: 0px; padding:0px;height:'+(imgHeight+textFromHeight)+'px; overflow:hidden;}');<br />     document.write('#txtFrom{height:'+textFromHeight+'px;line-height:'+textFromHeight+'px;width:'+imgWidth+'px;overflow:hidden;}');<br />     document.write('#imgTitle{width:'+imgWidth+';top:-'+(textFromHeight+26)+'px;height:18px}');</p>
		<p>     document.write('&lt;/style&gt;');<br />     document.write('&lt;div id="focuseFrom"&gt;');<br />     //焦点字框高度样式表 结束<br />     <br />        DWRIndex.getPicNewsAlt(ItemID,topcount,setAlt);<br />        <br />                       DWRIndex.getPicNewsTitle(ItemID,topcount,setTitle);<br />                       <br />                       DWRIndex.getPicNewsLink(ItemID,topcount,setLink); <br />                       <br />                       DWRIndex.getPicNewsbimgUrl(ItemID,topcount,setbContent);</p>
		<p>     function changeimg(n)<br />     {<br />      adNum=n;<br />      window.clearInterval(theTimer);<br />      adNum=adNum-1;<br />      nextAd();<br />     }<br />     function goUrl(){<br />       <br />       window.open(imgLink[adNum],'_blank');<br />     }<br />     //NetScape开始<br />     if (navigator.appName == "Netscape")<br />     {<br />     document.write('&lt;style type="text/css"&gt;');<br />     document.write('.buttonDiv{height:4px;width:21px;}');<br />     document.write('&lt;/style&gt;');<br />     function nextAd(){<br />                        <br />      if(adNum&lt;(imgUrl.length-1)){<br />      adNum++;<br />      }<br />      else {<br />      adNum=1;<br />      }<br />      if (imgUrl[adNum]==null){<br />                         adNum--;<br />                         document.images.imgInit.src="images/load.gif";<br />                         document.images.imgInit.alt="正在加载..."<br />                         setTimeout("nextAd()", 0);<br />                         return;<br />                        } <br />      theTimer=setTimeout("nextAd()", TimeOut);<br />      document.images.imgInit.src=imgUrl[adNum];<br />      <br />      document.images.imgInit.alt=imgAlt[adNum]; <br />      document.getElementById('focustext').innerHTML=imgtext[adNum];<br />      document.getElementById('imgLink').href=imgLink[adNum];<br />                        document.getElementById("imgtext").innerHTML=imgtext[adNum];//////////////////<br />     }<br />      document.write('&lt;a id="imgLink" href="'+imgLink[1]+'" target=_blank class="p1"&gt;&lt;img src="'+imgUrl[1]+'" name="imgInit" width='+imgWidth+' height='+imgHeight+' border=1 alt="'+imgAlt[1]+'" class="imgClass"&gt;&lt;/a&gt;&lt;div id="txtFrom"&gt;&lt;span id="focustext" class="'+textStyle+'"&gt;'+imgtext[1]+'&lt;/span&gt;&lt;/div&gt;')<br />      document.write('&lt;div id="imgTitle"&gt;');<br />      document.write('&lt;div id="imgTitle_down"&gt;');<br />     //数字按钮代码开始<br />     for(var i=1;i&lt;imgUrl.length;i++){document.write('&lt;a href="javascript:changeimg('+i+')" class="button" style="cursor:hand" title="'+imgAlt[i]+'"&gt;'+i+'&lt;/a&gt;');}<br />     //数字按钮代码结束<br />      document.write('&lt;/div&gt;');<br />      document.write('&lt;/div&gt;');<br />      document.write('&lt;/div&gt;');<br />      nextAd();<br />     }<br />     //NetScape结束<br />     //IE开始<br />     else<br />     {<br />    <br />     function playTran(){<br />      if (document.all)<br />          imgInit.filters.revealTrans.play(); <br /> <br />     }<br />     var key=0;<br />     function nextAd(){</p>
		<p>      //alert(adNum+"-----"+key);<br />      <br />      if(adNum&lt;topcount){<br />        adNum++ ;<br />        <br />      }<br />      else {<br />        adNum=1;<br />        <br />      }<br />                        if (imgUrl[adNum]==null){<br />                         adNum--;<br />                         document.images.imgInit.src="images/load.gif";<br />                         document.images.imgInit.alt="正在加载..."<br />                         setTimeout("nextAd()", 0);<br />                         return;<br />                        }      <br />      if( key==0 ){<br />       key=1;<br />      } else if (document.all){<br />       imgInit.filters.revealTrans.Transition=23;<br />       imgInit.filters.revealTrans.apply();<br />            playTran();<br />      }<br />      <br />      //alert(adNum);<br />      //alert(imgAlt[adNum]);<br />      document.images.imgInit.src=imgUrl[adNum];<br />      document.images.imgInit.alt=imgAlt[adNum]; <br />      document.getElementById('link'+adNum).style.background=buttonLineOn;<br />      for (var i=1;i&lt;=topcount;i++)<br />      {<br />         if (i!=adNum){document.getElementById('link'+i).style.background=buttonLineOff;}<br />      } <br />      focustext.innerHTML=imgtext[adNum];<br />      theTimer=setTimeout("nextAd()", TimeOut);<br />                        document.getElementById("imgtext").innerHTML=imgtext[adNum];//////////////////<br />     }<br />     document.write('&lt;a target=_self href="javascript:goUrl()"&gt;&lt;img style="FILTER: revealTrans(duration=1,transition=5);" src="javascript:nextAd()" width='+imgWidth+' height='+imgHeight+' border=0 vspace="0" name=imgInit class="imgClass"&gt;&lt;/a&gt;');<br />     document.write('&lt;div id="txtFrom"&gt;&lt;span id="focustext" class="'+textStyle+'"&gt;&lt;/span&gt;&lt;/div&gt;');<br />     document.write('&lt;div id="imgTitle"&gt;');<br />     document.write(' &lt;div id="imgTitle_down"&gt; &lt;a class="trans"&gt;&lt;/a&gt;');<br />     //数字按钮代码开始<br />     for(var i=1;i&lt;topcount+1;i++)<br />      {<br />      document.write('&lt;a id="link'+i+'"  href="javascript:changeimg('+i+')" class="button" style="cursor:hand" title="'+imgAlt[i]+'" onFocus="this.blur()"&gt;'+i+'&lt;/a&gt;');<br />                        <br />      }<br />     //数字按钮代码结束<br /> <br />     document.write('&lt;/div&gt;');<br />     document.write('&lt;/div&gt;');<br />     document.write('&lt;/div&gt;');<br />                    document.write("&lt;div id='imgtext'&gt;&lt;/div&gt;");//////////////////<br />     <br />     }<br />     //IE结束---<br />     &lt;/SCRIPT&gt; </p><img src ="http://www.blogjava.net/rain1102/aggbug/75609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-17 14:29 <a href="http://www.blogjava.net/rain1102/articles/75609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR中各种java方法的调用</title><link>http://www.blogjava.net/rain1102/articles/74294.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 10 Oct 2006 06:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/74294.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/74294.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/74294.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/74294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/74294.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 作者：minisun2000		请转载者注明作者与出处，尊重原创		    DWR是一个框架，简单的说就是能够在javascript直接调用java方法，而不必去写一大堆的javascript代码。它的实现是基于ajax的，可以实现无刷新效果。		    网上有不少DWR的例子，但大都只是某种方法的调用，本文只在使用层面上介绍DWR，并不涉更多的技术与设计，其目的是让初学者能够很快的学...&nbsp;&nbsp;<a href='http://www.blogjava.net/rain1102/articles/74294.html'>阅读全文</a><img src ="http://www.blogjava.net/rain1102/aggbug/74294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-10 14:48 <a href="http://www.blogjava.net/rain1102/articles/74294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax使用POST方法</title><link>http://www.blogjava.net/rain1102/articles/73846.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 08 Oct 2006 07:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/73846.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/73846.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/73846.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/73846.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/73846.html</trackback:ping><description><![CDATA[&lt;form method="post" action="test.do" onsubmit="sendRequest();return false"&gt;<br /><br />function getRequestBody(oForm){<br />  var aParams=new Array();<br />  for(var i=0;i&lt;oForm.elements.length;i++){<br />    var sParam=encodeURIComponent(oForm.elements[i].name);<br /> sParam+="=";<br /> sParam+=encodeURIComponent(oForm.elements[i].value);<br /> sParams.push(sParam);<br />  }<br />  return aParams.join("&amp;");<br />}<br /><br />function sendRequest(){<br />  var oForm=document.forms[0];<br />  var sBody=getRequestBody(oForm);<br />  var oXmlHttp=createRequest();<br />  oXmlHttp.open("post",oForm.action,true);<br />  oXmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");<br />  oXmlHttp.onreadystatechange=function(){<br />    if(oXmlHttp.readyState==4){<br />   saveResult(oXmlHttp.responseText);<br /> }else{<br />   saveResult("An error accurred: "+oXmlHttp.statusText);<br /> }<br />  }<br />  oXmlHttp.send(sBody);<br />}<img src ="http://www.blogjava.net/rain1102/aggbug/73846.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-08 15:48 <a href="http://www.blogjava.net/rain1102/articles/73846.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>createXMLHttp</title><link>http://www.blogjava.net/rain1102/articles/73704.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 08 Oct 2006 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/73704.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/73704.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/73704.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/73704.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/73704.html</trackback:ping><description><![CDATA[function createXMLHttp(){<br />  if(typeof XMLHttpRequest!="undefined"){<br />    return new XMLHttpRequest();<br />  }else if(window.ActiveXObject){<br />    var aVersions=["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"];<br /> for(var i=0;i&lt;aVersions.length;i++){<br />   try{<br />      var oXmlHttp=new ActiveXObject(aVersions[i]);<br />   return oXmlHttp;<br />   }catch(oError){<br />   <br />   }<br /> }<br />  }<br />}<img src ="http://www.blogjava.net/rain1102/aggbug/73704.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-08 09:56 <a href="http://www.blogjava.net/rain1102/articles/73704.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于DWR2.0的配置问题 </title><link>http://www.blogjava.net/rain1102/articles/73683.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 08 Oct 2006 00:01:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/73683.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/73683.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/73683.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/73683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/73683.html</trackback:ping><description><![CDATA[
		<p>
				<font size="1">自从换工作之后就没有研究过DWR了。下载了最新的DWR2.0M2版本。2.0加了很多东西，也有不少变化的地方。最容易看到的变化就是包名的变化了,由 uk.ltd.getahead 变成了 org.directwebremoting 。<br />        换上了新的配置</font>
		</p>
		<p>
				<font size="1">     &lt; servlet &gt; <br />         &lt; servlet-name &gt; dwr-invoker &lt;/ servlet-name &gt; <br />         &lt; servlet-class &gt; org.directwebremoting.servlet.DwrServlet &lt;/ servlet-class &gt; <br />         &lt; init-param &gt; <br />           &lt; param-name &gt; debug &lt;/ param-name &gt; <br />           &lt; param-value &gt; true &lt;/ param-value &gt; <br />         &lt;/ init-param &gt; <br />         &lt; load-on-startup &gt; 1 &lt;/ load-on-startup &gt; <br />     &lt;/ servlet &gt; <br />启动服务，抱错了。</font>
		</p>
		<p>
				<font size="1">java.lang.IllegalArgumentException: DefaultContainer can't find a classes<br />       at org.directwebremoting.impl.DefaultContainer.getBean(DefaultContainer.java:216)<br />       at org.directwebremoting.annotations.AnnotationsConfigurator.configure(AnnotationsConfigurator.java:50)<br />       at org.directwebremoting.servlet.DwrServlet.init(DwrServlet.java:121)</font>
		</p>
		<p>
				<font size="1">      在DWR的Maillist里面搜索了一下，还有答案，原来DWR2.0 加入了JDK5的注释(annotations).DwrServlet初始化的时候会去检查注释的类，找不到就抱错了。如果你不用annotations也可以忽略掉这个错误。不过看起来总是不爽。有人提出了方案。这样就ok了。</font>
		</p>
		<p>
				<font size="1">
				</font> </p>
		<p>
				<font size="1">
				</font> </p>
		<p>
				<br />
				<font size="1">&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;</font>
		</p>
		<p>
				<font size="1">&lt;!DOCTYPE web-app<br />    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />    "</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font size="1">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font size="1">"&gt;</font>
		</p>
		<p>
				<font size="1">&lt;web-app&gt;<br />  &lt;display-name&gt;Welcome to Tomcat&lt;/display-name&gt;<br />  &lt;description&gt;<br />     Welcome to Tomcat<br />  &lt;/description&gt;<br />  &lt;servlet&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;debug&lt;/param-name&gt;<br />      &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />    &lt;init-param&gt; <br />            &lt;param-name&gt;classes&lt;/param-name &gt; <br />            &lt;param-value&gt;java.lang.Object&lt;/param-value&gt; <br />    &lt;/init-param &gt; <br />    &lt;load-on-startup&gt;100&lt;/load-on-startup&gt; <br />  &lt;/servlet&gt;<br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br />  <br />&lt;/web-app&gt;</font>
				<br />
		</p>
<img src ="http://www.blogjava.net/rain1102/aggbug/73683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-10-08 08:01 <a href="http://www.blogjava.net/rain1102/articles/73683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP状态代码</title><link>http://www.blogjava.net/rain1102/articles/72432.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 28 Sep 2006 00:19:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/72432.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/72432.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/72432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/72432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/72432.html</trackback:ping><description><![CDATA[
		<table bordercolor="#99ccff" cellpadding="2" width="100%" border="1">
				<tbody>
						<tr>
								<td align="middle" width="15%" bgcolor="#3366cc" height="30">
										<font color="#ffffff">
												<b>状态代码</b>
										</font>
								</td>
								<td align="middle" width="30%" bgcolor="#3366cc">
										<font color="#ffffff">
												<b>状态信息</b>
										</font>
								</td>
								<td align="middle" width="55%" bgcolor="#3366cc">
										<font color="#ffffff">
												<b>代码含义</b>
										</font>
								</td>
						</tr>
						<tr>
								<td height="20">100</td>
								<td>Continue</td>
								<td>初始的请求已经接受，客户应当继续发送请求的其余部分。</td>
						</tr>
						<tr>
								<td height="20">101</td>
								<td>Switching Protocols</td>
								<td>服务器将遵从客户的请求转换到另外一种协议</td>
						</tr>
						<tr>
								<td height="20">200</td>
								<td>OK</td>
								<td>一切正常，对GET和POST请求的应答文档跟在后面。</td>
						</tr>
						<tr>
								<td height="20">201</td>
								<td>Created</td>
								<td>服务器已经创建了文档，Location头给出了它的URL。</td>
						</tr>
						<tr>
								<td height="20">202</td>
								<td>Accepted</td>
								<td>已经接受请求，但处理尚未完成。</td>
						</tr>
						<tr>
								<td height="20">203</td>
								<td>Non-Authoritative Information</td>
								<td>文档已经正常地返回，但一些应答头可能不正确，因为使用的是文档的拷贝 </td>
						</tr>
						<tr>
								<td height="20">204</td>
								<td>No Content</td>
								<td>没有新文档，浏览器应该继续显示原来的文档。如果用户定期地刷新页面，而Servlet可以确定用户文档足够新，这个状态代码是很有用的。</td>
						</tr>
						<tr>
								<td height="20">205</td>
								<td>Reset Content</td>
								<td>没有新的内容，但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容 </td>
						</tr>
						<tr>
								<td height="20">206</td>
								<td>Partial Content</td>
								<td>客户发送了一个带有Range头的GET请求，服务器完成了它。</td>
						</tr>
						<tr>
								<td height="20">300</td>
								<td>Multiple Choices</td>
								<td>客户请求的文档可以在多个位置找到，这些位置已经在返回的文档内列出。如果服务器要提出优先选择，则应该在Location应答头指明。</td>
						</tr>
						<tr>
								<td height="20">301</td>
								<td>Moved Permanently</td>
								<td>客户请求的文档在其他地方，新的URL在Location头中给出，浏览器应该自动地访问新的URL。</td>
						</tr>
						<tr>
								<td height="20">302</td>
								<td>Found</td>
								<td>类似于301，但新的URL应该被视为临时性的替代，而不是永久性的。注意，在HTTP1.0中对应的状态信息是“Moved</td>
						</tr>
						<tr>
								<td height="20">303</td>
								<td>See Other</td>
								<td>类似于301/302，不同之处在于，如果原来的请求是POST，Location头指定的重定向目标文档应该通过GET提取 </td>
						</tr>
						<tr>
								<td height="20">304</td>
								<td>Not Modified</td>
								<td>客户端有缓冲的文档并发出了一个条件性的请求（一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档）。服务器告诉客户，原来缓冲的文档还可以继续使用。</td>
						</tr>
						<tr>
								<td height="20">305</td>
								<td>Use Proxy</td>
								<td>客户请求的文档应该通过Location头所指明的代理服务器提取 </td>
						</tr>
						<tr>
								<td height="20">307</td>
								<td>Temporary Redirect</td>
								<td>和302（Found）相同。许多浏览器会错误地响应302应答进行重定向，即使原来的请求是POST，即使它实际上只能在POST请求的应答是303时才能重定向。由于这个原因，HTTP 1.1新增了307，以便更加清除地区分几个状态代码：当出现303应答时，浏览器可以跟随重定向的GET和POST请求；如果是307应答，则浏览器只能跟随对GET请求的重定向。</td>
						</tr>
						<tr>
								<td height="20">400</td>
								<td>Bad Request</td>
								<td>请求出现语法错误。</td>
						</tr>
						<tr>
								<td height="20">401</td>
								<td>Unauthorized</td>
								<td>客户试图未经授权访问受密码保护的页面。应答中会包含一个WWW-Authenticate头，浏览器据此显示用户名字/密码对话框，然后在填写合适的Authorization头后再次发出请求。</td>
						</tr>
						<tr>
								<td height="20">403</td>
								<td>Forbidden</td>
								<td>资源不可用。服务器理解客户的请求，但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。</td>
						</tr>
						<tr>
								<td height="20">404</td>
								<td>Not Found</td>
								<td>无法找到指定位置的资源。这也是一个常用的应答。</td>
						</tr>
						<tr>
								<td height="20">405</td>
								<td>Method Not Allowed</td>
								<td>请求方法（GET、POST、HEAD、DELETE、PUT、TRACE等）对指定的资源不适用。</td>
						</tr>
						<tr>
								<td height="20">406</td>
								<td>Not Acceptable</td>
								<td>指定的资源已经找到，但它的MIME类型和客户在Accpet头中所指定的不兼容 </td>
						</tr>
						<tr>
								<td height="20">407</td>
								<td>Proxy</td>
								<td>类似于401，表示客户必须先经过代理服务器的授权。</td>
						</tr>
						<tr>
								<td height="20">408</td>
								<td>Request Timeout</td>
								<td>在服务器许可的等待时间内，客户一直没有发出任何请求。客户可以在以后重复同一请求。</td>
						</tr>
						<tr>
								<td height="20">409</td>
								<td>Conflict</td>
								<td>通常和PUT请求有关。由于请求和资源的当前状态相冲突，因此请求不能成功。</td>
						</tr>
						<tr>
								<td height="20">410</td>
								<td>Gone</td>
								<td>所请求的文档已经不再可用，而且服务器不知道应该重定向到哪一个地址。它和404的不同在于，返回407表示文档永久地离开了指定的位置，而404表示由于未知的原因文档不可用。</td>
						</tr>
						<tr>
								<td height="20">411</td>
								<td>Length Require</td>
								<td>服务器不能处理请求，除非客户发送一个Content-Length头。</td>
						</tr>
						<tr>
								<td height="20">412</td>
								<td>Precondition Failed</td>
								<td>请求头中指定的一些前提条件失败 </td>
						</tr>
						<tr>
								<td height="20">413</td>
								<td>Request Entity Too Large</td>
								<td>目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求，则应该提供一个Retry-After头 </td>
						</tr>
						<tr>
								<td height="20">414</td>
								<td>Request URI Too Long</td>
								<td>URI太长 。</td>
						</tr>
						<tr>
								<td height="20">416</td>
								<td>Requested Range Not Satisfiable</td>
								<td>服务器不能满足客户在请求中指定的Range头。</td>
						</tr>
						<tr>
								<td height="20">500</td>
								<td>Internal Server Error</td>
								<td>服务器遇到了意料不到的情况，不能完成客户的请求。</td>
						</tr>
						<tr>
								<td height="20">501</td>
								<td>Not Implemented</td>
								<td>服务器不支持实现请求所需要的功能。例如，客户发出了一个服务器不支持的PUT请求。</td>
						</tr>
						<tr>
								<td height="20">502</td>
								<td>Bad Gateway</td>
								<td>服务器作为网关或者代理时，为了完成请求访问下一个服务器，但该服务器返回了非法的应答。</td>
						</tr>
						<tr>
								<td height="20">503</td>
								<td>Service Unavailable</td>
								<td>服务器由于维护或者负载过重未能应答。例如，Servlet可能在数据库连接池已满的情况下返回503。服务器返回503时可以提供一个Retry-After头。</td>
						</tr>
						<tr>
								<td height="20">504</td>
								<td>Gateway Timeout</td>
								<td>由作为代理或网关的服务器使用，表示不能及时地从远程服务器获得应答。</td>
						</tr>
						<tr>
								<td height="20">505</td>
								<td>HTTP Version Not Supported</td>
								<td>服务器不支持请求中所指明的HTTP版本。</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/rain1102/aggbug/72432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-28 08:19 <a href="http://www.blogjava.net/rain1102/articles/72432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR使用小试</title><link>http://www.blogjava.net/rain1102/articles/70531.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 19 Sep 2006 07:04:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/70531.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/70531.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/70531.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/70531.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/70531.html</trackback:ping><description><![CDATA[
		<p>java类<br />/**<br /> <a href="mailto:*@type_name">*@type_name</a>: TestDwr<br /> <a href="mailto:*@date">*@date</a>: 2006-9-19<br /> <a href="mailto:*@author">*@author</a> scott_zhou<br /> */<br />package com.rain.dwr;</p>
		<p>/**<br /> *<br /> */<br />public class TestDwr {</p>
		<p> public String getWord(String username){<br />  return "Hello "+username;<br /> }<br />}<br /></p>
		<hr />
		<br />web.xml配置<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;web-app version="2.4" <br /> xmlns="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a>" <br /> xmlns:xsi="<a href="http://www.w3.org/2001/XMLSchema-instance">http://www.w3.org/2001/XMLSchema-instance</a>" <br /> xsi:schemaLocation="<a href="http://java.sun.com/xml/ns/j2ee">http://java.sun.com/xml/ns/j2ee</a><br /> <a href="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd</a>"&gt;<p>  &lt;servlet&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />    &lt;init-param&gt;<br />      &lt;param-name&gt;debug&lt;/param-name&gt;<br />      &lt;param-value&gt;true&lt;/param-value&gt;<br />    &lt;/init-param&gt;<br />  &lt;/servlet&gt;<br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/dwr/*&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br />&lt;/web-app&gt;<br /></p><hr /><br />dwr.xml配置<br />&lt;!DOCTYPE dwr PUBLIC<br />    "-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"<br />    "<a href="http://www.getahead.ltd.uk/dwr/dwr10.dtd">http://www.getahead.ltd.uk/dwr/dwr10.dtd</a>"&gt;<br />&lt;dwr&gt;<br />&lt;allow&gt;<br />    &lt;create creator="new" javascript="Test"&gt;<br />      &lt;param name="class" value="com.rain.dwr.TestDwr"/&gt;<br />    &lt;/create&gt;<br /> &lt;/allow&gt;<br />&lt;/dwr&gt;<br /><hr /><p>HTML页面代码<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;test.html&lt;/title&gt;<br /> <br />    &lt;script type='text/javascript' src='/angry/dwr/interface/Test.js'&gt;&lt;/script&gt;<br />    &lt;script type='text/javascript' src='/angry/dwr/engine.js'&gt;&lt;/script&gt;<br />    &lt;script type='text/javascript' src='/angry/dwr/util.js'&gt;&lt;/script&gt;<br />    &lt;script type="text/javascript"&gt;<br />      function show(){<br />        var name=DWRUtil.getValue("username");//使用getvalue方法得到id为username的值<br />        Test.getWord(name,execute);//调用getWord方法，第一个参数为传递的值，最后一个参数为回调程序<br />        //alert(word);<br />      }<br />      function execute(data){<br />        DWRUtil.setValue("a",data); //调用setValue方法来设置值<br />        DWRUtil.setValue("rst",data);<br />        <br />      }<br />    &lt;/script&gt;</p><p>  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />   &lt;INPUT type="text" id="username"&gt;<br />    &lt;INPUT type="button" value="提交" onclick="show()"&gt;<br />    &lt;INPUT type="text" id="rst"&gt;<br />    &lt;div id="a"&gt;<br />    &lt;/div&gt;</p><p>  &lt;/body&gt;<br />&lt;/html&gt;<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/70531.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-19 15:04 <a href="http://www.blogjava.net/rain1102/articles/70531.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>dwr的配置中遇到的问题以及解决办法</title><link>http://www.blogjava.net/rain1102/articles/70523.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 19 Sep 2006 06:21:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/70523.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/70523.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/70523.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/70523.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/70523.html</trackback:ping><description><![CDATA[我在部署dwr的例子时候，执行<a href="http://localhost:8080/myapp/dwr/">http://localhost:8080/myapp/dwr/</a>总是报javax.servlet.ServletException: Servlet.init() for servlet dwr-invoker threw exception <br />   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) <br />   org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) <br />   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) <br />   org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) <br />   org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) <br />   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) <br />   java.lang.Thread.run(Thread.java:595) <br />解决办法，原因是我的Tomcat5.0.28和JDK1.5中的 xml-parser 冲突，于是我把TOMCAT_HOME/common/endorsed/xml-apis.jar中的xml-parser 删除了就好了，整个DWR就在我的电脑上运行起来了。<img src ="http://www.blogjava.net/rain1102/aggbug/70523.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-19 14:21 <a href="http://www.blogjava.net/rain1102/articles/70523.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate实现级联下拉单</title><link>http://www.blogjava.net/rain1102/articles/69348.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 04:45:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69348.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69348.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69348.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69348.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69348.html</trackback:ping><description><![CDATA[
		<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;kind.html&lt;/title&gt;<br />  &lt;script type="text/javascript" src="js/common.js"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript"&gt;<br />    function refreshModelList(){ <br />      var oneName=document.getElementById("kindone").value;<br />      if(oneName==""){<br />        clearlist();<br />        return;<br />      }<br />      var url="kind.do?method=search&amp;&amp;kindid="+oneName;<br />     <br />      createXMLHttpRequest();<br />      <br />      xmlHttp.onreadystatechange=handleStateChange;<br />      xmlHttp.open("GET",url,true);<br />      xmlHttp.send(null);<br />      <br />    }<br />    function handleStateChange(){<br />      if(xmlHttp.readyState==4){ <br />        if(xmlHttp.status==200){<br />          setNames(); <br />        }<br />      }<br />    }<br />    function clearlist(){<br />      var models=document.getElementById("kindtwo");<br />      while(models.childNodes.length&gt;0){<br />        models.removeChild(models.childNodes[0]);<br />      }<br />    }<br />    function setNames(){<br />      clearlist();<br />      var models=document.getElementById("kindtwo");<br />      var xmlDoc=xmlHttp.responseXML;<br />      var results=xmlDoc.getElementsByTagName("kind");<br />      var option=null;<br />      for(var i=0;i&lt;results.length;i++){<br />        option=document.createElement("option");<br />        option.appendChild(document.createTextNode(results[i].firstChild.nodeValue));<br />        models.appendChild(option);<br />      }<br />    }<br />  &lt;/script&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />    &lt;h2&gt;dynamicLists&lt;/h2&gt;<br />    &lt;select id="kindone" onchange="refreshModelList();"&gt;<br />      &lt;option value="1"&gt;a&lt;/option&gt;<br />      &lt;option value="2"&gt;b&lt;/option&gt;<br />      &lt;option value="3"&gt;c&lt;/option&gt;<br />      &lt;option value="4"&gt;d&lt;/option&gt;<br />    &lt;/select&gt;<br />    &lt;select id="kindtwo"&gt;<br />    &lt;/select&gt;<br />  &lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<hr />
/*<br /> * Generated by MyEclipse Struts<br /> * Template path: templates/java/JavaClass.vtl<br /> */<br />package com.rain.struts.action; 
<p>import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.util.Iterator;<br />import java.util.List;</p><p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.actions.DispatchAction;<br />import org.apache.struts.validator.DynaValidatorForm;</p><p>import com.rain.bean.KindDao;</p><p>/** <br /> * MyEclipse Struts<br /> * Creation date: 09-13-2006<br /> * <br /> * XDoclet definition:<br /> * @struts.action parameter="method"<br /> */<br />public class KindAction extends DispatchAction {<br /> /*<br />  * Generated Methods<br />  */</p><p> /** <br />  * Method execute<br />  * @param mapping<br />  * @param form<br />  * @param request<br />  * @param response<br />  * @return ActionForward<br />  */<br /> public ActionForward search(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  DynaValidatorForm kindForm = (DynaValidatorForm)form;<br />  KindDao dao=new KindDao();<br />  int kindid=Integer.parseInt(kindForm.getString("kindid"));<br />  List list=dao.findAllKind(kindid);<br />  Iterator it=list.iterator();<br />  if(it.hasNext()){<br />   PrintWriter out;<br />   try {<br />    response.setContentType("text/xml;charset=UTF-8");<br />    response.setHeader("Cache-Control", "no-cache");<br />    out = response.getWriter();<br /><br />    out.println("&lt;response&gt;");<br />    while(it.hasNext()){<br />     String name=it.next().toString();<br />     out.println("&lt;kind&gt;"+name+"&lt;/kind&gt;");<br />    }<br />    out.println("&lt;/response&gt;");<br />    it=null;<br />    out.close();<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />   <br />  }else{<br />   response.setStatus(HttpServletResponse.SC_NO_CONTENT);<br />  }<br />  // TODO Auto-generated method stub<br />  return null;<br /> }<br />}</p><img src ="http://www.blogjava.net/rain1102/aggbug/69348.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 12:45 <a href="http://www.blogjava.net/rain1102/articles/69348.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate注册</title><link>http://www.blogjava.net/rain1102/articles/69302.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 01:29:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69302.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69302.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69302.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69302.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69302.html</trackback:ping><description><![CDATA[
		<p>HTML代码<br />&lt;html&gt;<br />&lt;head&gt;<br />&lt;title&gt;用户注册&lt;/title&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt;<br />&lt;style type="text/css"&gt;<br />td {<br /> font-size:12px;<br /> color:#000033;<br />}<br />span {<br /> font-size:12px;<br /> color:#FF0000;<br /> text-align:center;<br /> height:20px;<br /> vertical-align:bottom;<br />}<br />input {<br /> border:0px;<br /> border-bottom:1px #666666 dotted;<br /> color:#3399FF;<br />}<br />&lt;/style&gt;<br />&lt;script language="JavaScript"&gt;<br />  var xmlHttp;<br />  function createXMLHttpRequest(){<br />  if(window.ActiveXObject){<br />     try {<br />    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");<br />  } catch (e) {<br />  try {<br />    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<br />   } catch (e) {}<br />  }<br />   }else if(window.XMLHttpRequest){<br />     xmlHttp = new XMLHttpRequest();<br />  if (xmlHttp.overrideMimeType) {<br />    xmlHttp.overrideMimeType('text/xml');<br />   }<br />   }<br />   if (!xmlHttp) { <br />   window.alert("Could not create XMLHttpRequest.");<br />   return false;<br />   }<br />  }<br />  function checkUsername(obj){<br />    createXMLHttpRequest();<br />    document.getElementById("usernameview").innerHTML="";<br />    var url="login.do?method=checkUserName&amp;&amp;UserName="+obj;<br />    xmlHttp.onreadystatechange=handleStateChange;<br />    xmlHttp.open("GET",url,true);<br />    xmlHttp.send(null);<br />  }<br />  function handleStateChange(){<br />    if(xmlHttp.readyState==4){<br />        if(xmlHttp.status==200){<br />          document.getElementById("usernameview").innerHTML=xmlHttp.responseText;<br />        }<br />      }<br />  }<br />  function checkPassword(obj){<br />    document.getElementById("pwdview").innerHTML="";<br />    if(obj.length&lt;6){<br />      document.getElementById("pwdview").innerHTML="密码长度不能小于六位！";<br />    }<br />    else{<br />      document.getElementById("pwdview").innerHTML="√";<br />    }<br />  }<br />  function checkPassword2(obj){<br />    var pwd1=document.getElementById("password1").value;<br />    document.getElementById("usernameview").innerHTML="";<br />    if(obj!=pwd1||obj==null)<br />    {<br />      document.getElementById("pwd2view").innerHTML="两次输入的密码不一致！";<br />    }else{<br />      document.getElementById("pwd2view").innerHTML="√";<br />    }<br />  }<br />  function checkRealName(obj){<br />    if(obj==null){<br />       document.getElementById("realnameview").innerHTML="真实姓名不能为空！";<br />    }else{<br />        document.getElementById("realnameview").innerHTML="√";<br />    }<br />  }<br />&lt;/script&gt;</p>
		<p>&lt;/head&gt;<br />&lt;body&gt;<br /> &lt;form name="RegistForm"&gt;<br /> &lt;table height="328" align="center" cellpadding="0" cellspacing="0" style="border:2px #666666 solid; "&gt;<br /> <br /> &lt;tr&gt;<br />  &lt;td colspan="2" height="30" bgcolor="#666666" align="center" style="border-bottom:1px #666666 solid;"&gt;&lt;font color="#FFFFFF"&gt;&lt;b&gt;用&amp;nbsp;户&amp;nbsp;注&amp;nbsp;册&lt;/b&gt;&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td width="147" height="35" align="right"&gt;用&amp;nbsp;户&amp;nbsp;名：&lt;/td&gt;<br />  &lt;td width="368"&gt;&lt;input type="text" name="UserName" id="username" maxlength="15" size="13" onblur="checkUsername(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;span id="usernameview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;密&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;码：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="password" name="Password" id="password1" maxlength="15" size="15" onblur="checkPassword(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;span id="pwdview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;密码校验：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="password" name="Password2" id="password2" maxlength="15" size="15" onblur="checkPassword2(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&amp;nbsp;&amp;nbsp;&lt;span id="pwd2view"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;真实姓名：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="realname" id="realname" size="10" maxlength="10" onblur="checkRealName(this.value);"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;span id="realnameview"&gt;&lt;/span&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;性&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;别：&lt;/td&gt;<br />  &lt;td&gt;&lt;select name="sex" id="sex"&gt;<br />  &lt;option value="m"&gt;男&lt;/option&gt;<br />  &lt;option value="w"&gt;女&lt;/option&gt;&lt;/select&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;联系电话：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="tel" id="tel" maxlength="12" size="13" &gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;手&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;机：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="mobile" id="mobile" maxlength="12" size="13"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="35" align="right"&gt;E - mail：&lt;/td&gt;<br />  &lt;td&gt;&lt;input type="text" name="email" id="email" size="25" onChange="checkEmail();"&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="86" align="right"&gt;个人简介：&lt;/td&gt;<br />  &lt;td&gt;&lt;textarea cols="30" rows="4" class="text" name="memo" style="overflow:auto; border:1px #666666 solid; color:#3399FF;"&gt;&lt;/textarea&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;*&lt;/font&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="10" colspan="2"&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> &lt;tr&gt;<br />  &lt;td height="30" colspan="2" align="center" style="border-top:1px #666666 solid; "&gt;&lt;input onClick="javascript:addUser();" style="background-color:#666666; color:#FFFFFF; border:0; text-align:center; width:60px;" type="button" name="add" value="A D D"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;input style="background-color:#666666; color:#FFFFFF; border:0; width:60px;" type="reset" name="reset" value="R E T"&gt;&lt;/td&gt;<br /> &lt;/tr&gt;<br /> <br /> &lt;/table&gt;<br /> &lt;/form&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;<br /></p>
		<p>
		</p>
		<hr />
		<p>/*<br /> * Generated by MyEclipse Struts<br /> * Template path: templates/java/JavaClass.vtl<br /> */<br />package com.rain.struts.action;</p>
		<p>import java.io.IOException;</p>
		<p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.actions.DispatchAction;<br />import org.apache.struts.validator.DynaValidatorForm;</p>
		<p>import com.rain.bean.Regist;</p>
		<p>/** <br /> * MyEclipse Struts<br /> * Creation date: 09-12-2006<br /> * <br /> * XDoclet definition:<br /> * @struts.action parameter="method" validate="true"<br /> */<br />public class LoginAction extends DispatchAction {<br /> </p>
		<p> /** <br />  * Method execute<br />  * @param mapping<br />  * @param form<br />  * @param request<br />  * @param response<br />  * @return ActionForward<br />  */<br /> public ActionForward checkUserName(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  Regist regist=new Regist();<br />  DynaValidatorForm loginForm = (DynaValidatorForm)form;<br />  String username=loginForm.getString("UserName");<br />  System.out.println(username);<br />  boolean flag=regist.findByName(username);<br />  System.out.println("test");<br />  if(flag)<br />  {<br />   try {<br />    response.getWriter().write("sorry!");<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />  }else<br />  {<br />   try {<br />    response.getWriter().write("luck!");<br />   } catch (IOException e) {<br />    // TODO 自动生成 catch 块<br />    e.printStackTrace();<br />   }<br />  }<br />     <br />  return null;<br /> }<br />}<br /></p>
		<hr />
<img src ="http://www.blogjava.net/rain1102/aggbug/69302.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 09:29 <a href="http://www.blogjava.net/rain1102/articles/69302.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax--Common代码</title><link>http://www.blogjava.net/rain1102/articles/69298.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 01:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69298.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69298.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69298.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69298.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69298.html</trackback:ping><description><![CDATA[var xmlHttp;<br />function createXMLHttpRequest(){<br />  if(window.ActiveXObject){<br />     try {<br />    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");<br />  } catch (e) {<br />  try {<br />    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<br />   } catch (e) {}<br />  }<br />   }else if(window.XMLHttpRequest){<br />     xmlHttp = new XMLHttpRequest();<br />  if (xmlHttp.overrideMimeType) {<br />    xmlHttp.overrideMimeType('text/xml');<br />   }<br />   }<br />   if (!xmlHttp) { <br />   window.alert("Could not create XMLHttpRequest.");<br />   return false;<br />   }<br />}<br />function startRequestGET(url,handleStateChange){<br />  createXMLHttpRequest();<br />  xmlHttp.onreadystatechange=handleStateChange;<br />  xmlHttp.open("GET",url,true);<br />  xmlHttp.send(null);<br />}<br />function startRequestPOST(url,handleStateChange,data){<br />  createXMLHttpRequest();<br />  xmlHttp.onreadystatechange=handleStateChange;<br />  xmlHttp.open("POST",url,true);<br />  xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");<br />  xmlHttp.send(data);<br />}<img src ="http://www.blogjava.net/rain1102/aggbug/69298.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 09:25 <a href="http://www.blogjava.net/rain1102/articles/69298.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax+Struts+Hibernate实现动态搜索</title><link>http://www.blogjava.net/rain1102/articles/69294.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 13 Sep 2006 01:19:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/articles/69294.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/69294.html</wfw:comment><comments>http://www.blogjava.net/rain1102/articles/69294.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/69294.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/69294.html</trackback:ping><description><![CDATA[
		<p>HTML源代码<br />&lt;%@ page language="java" contentType="text/html; charset=UTF-8"%&gt;<br />&lt;html&gt;<br />  &lt;head&gt;<br />    &lt;title&gt;article.html&lt;/title&gt;<br />  &lt;script type="text/javascript" src="js/common.js"&gt;&lt;/script&gt;<br />  &lt;script type="text/javascript"&gt;<br />  var completeDiv;<br />  var inputField;<br />  var nameTable;<br />  var nameTableBody;<br />  function initVars() {<br />     inputField = document.getElementById("title");            <br />     nameTable = document.getElementById("name_table");<br />     completeDiv = document.getElementById("popup");<br />     nameTableBody = document.getElementById("name_table_body");<br />     <br />  }<br /> <br />  function findNames(){<br />   initVars();<br />   if (inputField.value.length &gt; 0) {<br />       createXMLHttpRequest();  <br />       var url = "article.do?method=search&amp;title="+<font color="#ff1493">encodeURI</font>(inputField.value);   <br />       xmlHttp.open("GET", url, true);<br />       xmlHttp.onreadystatechange = callback;<br />       xmlHttp.send(null);<br />    } else {<br />       clearNames();<br />    }<br />  }<br />  function callback() {<br />            if (xmlHttp.readyState == 4) {<br />                if (xmlHttp.status == 200) {<br />                <br />                    var name = xmlHttp.responseXML.getElementsByTagName("title")[0].firstChild.data;<br />                    setNames(xmlHttp.responseXML.getElementsByTagName("title"));<br />                } else if (xmlHttp.status == 204){<br />                    clearNames();<br />                   <br />                }<br />            }<br />        }<br />        <br />        function setNames(the_names) {            <br />            clearNames();<br />            var size = the_names.length;<br />            setOffsets();</p>
		<p>            var row, cell, txtNode;<br />            for (var i = 0; i &lt; size; i++) {<br />                var nextNode = the_names[i].firstChild.data;<br />                row = document.createElement("tr");<br />                cell = document.createElement("td");<br />                <br />                cell.onmouseout = function() {this.className='mouseOver';};<br />                cell.onmouseover = function() {this.className='mouseOut';};<br />                cell.setAttribute("bgcolor", "#FFFAFA");<br />                cell.setAttribute("border", "0");<br />                cell.onclick = function() { populateName(this); } ;                             </p>
		<p>                txtNode = document.createTextNode(nextNode);<br />                cell.appendChild(txtNode);<br />                row.appendChild(cell);<br />                nameTableBody.appendChild(row);<br />                <br />            }<br />        }</p>
		<p>        function setOffsets() {<br />            var end = inputField.offsetWidth;<br />            var left = calculateOffsetLeft(inputField);<br />            var top = calculateOffsetTop(inputField) + inputField.offsetHeight;</p>
		<p>            completeDiv.style.border = "black 1px solid";<br />            completeDiv.style.left = left + "px";<br />            completeDiv.style.top = top + "px";<br />            nameTable.style.width = end + "px";<br />        }<br />        <br />        function calculateOffsetLeft(field) {<br />          return calculateOffset(field, "offsetLeft");<br />        }</p>
		<p>        function calculateOffsetTop(field) {<br />          return calculateOffset(field, "offsetTop");<br />        }</p>
		<p>        function calculateOffset(field, attr) {<br />          var offset = 0;<br />          while(field) {<br />            offset += field[attr]; <br />            field = field.offsetParent;<br />          }<br />          return offset;<br />        }</p>
		<p>        function populateName(cell) {<br />            inputField.value = cell.firstChild.nodeValue;<br />            clearNames();<br />        }<br />  function clearNames() {<br />     var ind = nameTableBody.childNodes.length;<br />     for (var i = ind - 1; i &gt;= 0 ; i--) {<br />       nameTableBody.removeChild(nameTableBody.childNodes[i]);<br />     }<br />    completeDiv.style.border = "none";<br />  }<br />  &lt;/script&gt;<br />  &lt;/head&gt;<br />  <br />  &lt;body&gt;<br />    &lt;h3&gt;Ajax Auto Complete Example&lt;/h3&gt;<br />    请输入名称：&lt;input type="text" name="title" id="title" size="30" width="100" height="20" onkeyup="findNames();"&gt;<br />    &lt;div style="position:absolute;" id="popup"&gt;<br />        &lt;table id="name_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"/&gt;            <br />            &lt;tbody id="name_table_body"&gt;&lt;/tbody&gt;<br />        &lt;/table&gt;<br />    &lt;/div&gt;<br />  &lt;/body&gt;<br />&lt;/html&gt;</p>
		<p>
		</p>
		<hr />
		<p>Action源代码<br />/*<br /> * Generated by MyEclipse Struts<br /> * Template path: templates/java/JavaClass.vtl<br /> */<br />package com.rain.struts.action;</p>
		<p>import java.io.IOException;<br />import java.io.PrintWriter;<br />import java.io.UnsupportedEncodingException;<br />import java.util.Iterator;</p>
		<p>import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.actions.DispatchAction;<br />import org.apache.struts.validator.DynaValidatorForm;</p>
		<p>import com.rain.bean.ArticleDao;</p>
		<p>/** <br /> * MyEclipse Struts<br /> * Creation date: 09-12-2006<br /> * <br /> * XDoclet definition:<br /> * @struts.action parameter="method"<br /> */<br />public class ArticleAction extends DispatchAction {<br /> /*<br />  * Generated Methods<br />  */</p>
		<p> /** <br />  * Method execute<br />  * @param mapping<br />  * @param form<br />  * @param request<br />  * @param response<br />  * @return ActionForward<br />  */<br /> public ActionForward search(ActionMapping mapping, ActionForm form,<br />   HttpServletRequest request, HttpServletResponse response) {<br />  DynaValidatorForm articleForm = (DynaValidatorForm)form;<br />  String title;<br />  try {<br />   title = new String(request.getParameter("title").getBytes("ISO8859_1"),"UTF-8");<br />   System.out.println(title);<br />   ArticleDao dao=new ArticleDao();<br />   <br />   Iterator it=dao.findAllName(title).iterator();<br />   <br />   if(it.hasNext()){<br />    PrintWriter out;<br />    try {<br />     <br />     response.setContentType("text/xml;charset=UTF-8");<br />     response.setHeader("Cache-Control", "no-cache");<br />     out = response.getWriter();<br />     out.println("&lt;response&gt;");<br />     while(it.hasNext()){<br />      String name=it.next().toString();<br />      out.println("&lt;title&gt;"+name+"&lt;/title&gt;");<br />     }<br />     out.println("&lt;/response&gt;");<br />     it=null;<br />     out.close();<br />    } catch (IOException e) {<br />     // TODO 自动生成 catch 块<br />     e.printStackTrace();<br />    }<br />    <br />   }else{<br />    response.setStatus(HttpServletResponse.SC_NO_CONTENT);<br />   }<br />  } catch (UnsupportedEncodingException e1) {<br />   // TODO 自动生成 catch 块<br />   e1.printStackTrace();<br />  }<br />  <br />  <br />  return null;<br /> }<br />}</p>
		<hr />
		<br />Dao源代码<br />/**<br /> <a href="mailto:*@type_name">*@type_name</a>: ArticleDao<br /> <a href="mailto:*@date">*@date</a>: 2006-9-13<br /> <a href="mailto:*@author">*@author</a> scott_zhou<br /> */<br />package com.rain.bean; 
<p>import java.util.List;</p><p>import org.hibernate.Query;<br />import org.hibernate.Session;<br />import org.hibernate.Transaction;</p><p>import com.rain.HibernateSessionFactory;</p><p>/**<br /> *<br /> */<br />public class ArticleDao {</p><p> public List findAllName(String title){<br />  System.out.println("11");<br />  String hql="select art.title from Article art where art.title like '"+title+"%'";<br />     List list=null;<br />     try{<br />      <br />      Session session=HibernateSessionFactory.getCurrentSession();</p><p>         Transaction tx=session.beginTransaction();<br />          Query query=session.createQuery(hql);<br />            <br />            list=query.list();<br />            tx.commit();<br />            session.close();<br />     }catch(Exception e){<br />      System.out.println(e.getMessage());<br />      e.printStackTrace();<br />     }<br />        <br />        return list;<br /> }<br />}<br /></p><img src ="http://www.blogjava.net/rain1102/aggbug/69294.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2006-09-13 09:19 <a href="http://www.blogjava.net/rain1102/articles/69294.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>