﻿<?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-semovy-文章分类-ajax</title><link>http://www.blogjava.net/WshmAndLily/category/25055.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 21 Apr 2008 22:38:08 GMT</lastBuildDate><pubDate>Mon, 21 Apr 2008 22:38:08 GMT</pubDate><ttl>60</ttl><item><title>AJAX基本框架</title><link>http://www.blogjava.net/WshmAndLily/articles/194189.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Sat, 19 Apr 2008 07:11:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/194189.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/194189.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/194189.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/194189.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/194189.html</trackback:ping><description><![CDATA[//创建XMLHttpRequest对象<br />
function getXMLHttpRequest()<br />
{<br />
&nbsp;http_request = false;<br />
&nbsp;if(window.XMLHttpRequest)<br />
&nbsp;{<br />
&nbsp;&nbsp;http_request = new XMLHttpRequest();<br />
&nbsp;&nbsp;if(http_request.overrideMimeType)<br />
&nbsp;&nbsp;&nbsp;http_request.overrideMimeType("text/xml");<br />
&nbsp;}<br />
&nbsp;else<br />
&nbsp;{<br />
&nbsp;&nbsp;if(window.ActiveXObject)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;http_request = new ActiveXObject("Msxml2.XMLHTTP");<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;catch(e)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;try<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;http_request = new ActiveXObject("Microsoft.XMLHTTP");<br />
&nbsp;&nbsp;&nbsp;&nbsp;}catch(e)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;return http_request;<br />
}<br />
//发送请求<br />
/*<br />
&nbsp;@http_request 异步请求对象<br />
&nbsp;@url 请求位置<br />
&nbsp;@method 请求方法<br />
&nbsp;@content 请求内容 eg. param1=xxx1&amp;param2=xxx2<br />
&nbsp;@callBack 请求回调<br />
*/<br />
function send_request(http_request,url,method,content,callBack)<br />
{<br />
&nbsp;if(!http_request)<br />
&nbsp;{<br />
&nbsp;&nbsp;alert('无法创建异步请求对象!');<br />
&nbsp;&nbsp;return;<br />
&nbsp;}<br />
&nbsp;http_request.onreadystatechange = callBack;<br />
&nbsp;if(method.toUpperCase() == 'GET')<br />
&nbsp;{<br />
&nbsp;&nbsp;http_request.open(method,url,true);<br />
&nbsp;&nbsp;http_request.setRequestHeader('Content-Type','text/html;charset=UTF-8');<br />
&nbsp;}<br />
&nbsp;else if(method.toUpperCase == 'POST')<br />
&nbsp;{<br />
&nbsp;&nbsp;http_request.open(method,url,true);<br />
&nbsp;&nbsp;http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');<br />
&nbsp;}<br />
&nbsp;else<br />
&nbsp;{<br />
&nbsp;&nbsp;alert('请求方法出错!');<br />
&nbsp;&nbsp;return;<br />
&nbsp;}<br />
&nbsp;http_request.send(content);<br />
}<br />
//返回文本的<br />
function getWebContent()<br />
{<br />
&nbsp;var webConReq = getXMLHttpRequest();//ajax不支持跨跨域访问<br />
&nbsp;send_request(webConReq,'./servlet/testServlet','get',null,<br />
&nbsp;function()<br />
&nbsp;{<br />
&nbsp;&nbsp;if(webConReq.readyState == 4)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if(webConReq.status == 200)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var doc = webConReq.responseText;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(doc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("pageCon").innerHTML = doc;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert('请求失败!');<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;);<br />
}<br />
//返回xml<br />
function getXml()<br />
{<br />
&nbsp;var webConReq = getXMLHttpRequest();//ajax不支持跨跨域访问<br />
&nbsp;send_request(webConReq,'./NewFile.xml','get',null,<br />
&nbsp;function()<br />
&nbsp;{<br />
&nbsp;&nbsp;if(webConReq.readyState == 4)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if(webConReq.status == 200)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;var doc = webConReq.responseXML;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(doc)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var root = doc.getElementsByTagName("items")[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var items = root.getElementsByTagName("item");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var html = '';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(var i=0;i&lt;items.length;i++)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html += "id:" + items[i].getAttribute('id');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html += " name:" + items[i].getAttribute('name');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;document.getElementById("xml").innerHTML = html;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;alert('请求失败!');<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;);<br />
}<br />
<br />
&nbsp;&nbsp;&lt;a href="javascript:getWebContent();"&gt;异步获取页面&lt;/a&gt;&nbsp;<br />
&nbsp;&nbsp;&lt;font id="pageCon"&gt;&lt;/font&gt;&lt;br&gt;<br />
&nbsp;&nbsp;&lt;a href="javascript:getXml();"&gt;异步XML&lt;/a&gt;&nbsp;<br />
&nbsp;&nbsp;&lt;font id="xml"&gt;&lt;/font&gt;
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/194189.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2008-04-19 15:11 <a href="http://www.blogjava.net/WshmAndLily/articles/194189.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Windows关机效果分析</title><link>http://www.blogjava.net/WshmAndLily/articles/148369.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Wed, 26 Sep 2007 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/148369.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/148369.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/148369.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/148369.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/148369.html</trackback:ping><description><![CDATA[<p>基本原理分析</p>
<p>Windows关机效果分析<br />
<br />
使用Windows系统的用户在关机的时候，出现的界面只允许用户选择关机、注销或取消动作，而桌面上的程序都不能使用，并且屏幕呈现灰色状态。</p>
<p>本例将仿照这种高亮显示的效果在网页上实现.</p>
<p>在网页上运用这种关机效果有什么好处呢？首先，由于单击某一链接后，将用户此时不可用的操作隐藏在后台，将可用的操作放在屏幕最上层，并高亮显示，可以避免用户的误操作。其次，将信息高亮显示，也可以提醒用户应该注意的事项。<br />
<br />
网页中实现关机效果分析<br />
<br />
在网页中实现这种效果的原理很简单。创建两个图层，一个为遮盖层，覆盖整个页面，并且显示为灰色；另一个图层作为高亮显示的部分，在遮盖层的上方，这可通过设置图层的z-index属性来设置。当取消关机效果后，只需将这两个图层元素在页面中删除即可。<br />
<br />
以下代码实现显示关机效果。<br />
<br />
以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>&lt;html&gt;<br />
            <br />
            &lt;head&gt;<br />
            <br />
            &lt;title&gt;html" class="wordstyle"&gt;asp?typeid=119" snap_preview_added="no"&gt;Ajax LightBox Sample&lt;/title&gt;<br />
            <br />
            &lt;style type="text/html" class="wordstyle"&gt;asp?typeid=38" snap_preview_added="no"&gt;CSS"&gt;<br />
            <br />
            #lightbox {/*该层为高亮显示层*/<br />
            <br />
            BORDER-RIGHT: #fff 1px solid;<br />
            <br />
            BORDER-TOP: #fff 1px solid;<br />
            <br />
            DISPLAY: block; <br />
            <br />
            Z-INDEX: 9999; /*设置该层在网页的最上端,设置足够大*/<br />
            <br />
            BACKGROUND: #fdfce9; /*设置背景色*/<br />
            <br />
            LEFT: 50%; <br />
            <br />
            MARGIN: -220px 0px 0px -250px; <br />
            <br />
            BORDER-LEFT: #fff 1px solid; <br />
            <br />
            WIDTH: 500px; <br />
            <br />
            BORDER-BOTTOM: #fff 1px solid; <br />
            <br />
            POSITION: absolute; <br />
            <br />
            TOP: 50%; <br />
            <br />
            HEIGHT: 400px; <br />
            <br />
            TEXT-ALIGN: left<br />
            <br />
            }<br />
            <br />
            #overlay {/*该层为覆盖层*/<br />
            <br />
            DISPLAY: block;<br />
            <br />
            Z-INDEX: 9998; /*设置高亮层的下方*/<br />
            <br />
            FILTER: alpha(opacity=80); /*设置成透明*/<br />
            <br />
            LEFT: 0px; <br />
            <br />
            WIDTH: 100%; <br />
            <br />
            POSITION: absolute; <br />
            <br />
            TOP: 0px; <br />
            <br />
            HEIGHT: 100%; <br />
            <br />
            BACKGROUND-COLOR: #000; <br />
            <br />
            moz-opacity: 0.8; <br />
            <br />
            opacity: .80<br />
            <br />
            }<br />
            <br />
            &lt;/style&gt;<br />
            <br />
            &lt;/head&gt;<br />
            <br />
            &lt;body&gt;<br />
            <br />
            &lt;!--该层为覆盖层 --&gt;<br />
            <br />
            &lt;div id="overlay"&gt;&lt;/div&gt;<br />
            <br />
            &lt;!--该层为高亮显示层 --&gt;<br />
            <br />
            &lt;div id="lightbox"&gt;&lt;/div&gt;<br />
            <br />
            &lt;/body&gt;<br />
            <br />
            &lt;/html&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
需要注意的是，在IE浏览器中如果有&lt;select&gt;标记，则该标记不能被覆盖层覆盖，但在其他浏览器中则可以覆盖。</p>
<p>在使用IE浏览器时，要先将网页中的&lt;select&gt;元素隐藏起来。如以下代码可以用于隐藏页面所有的&lt;select&gt;元素。<br />
<br />
selects = document.getElementsByTagName('select');<br />
<br />
以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>for(i = 0; i &lt; selects.length; i++) {<br />
            <br />
            selects[i].style.visibility = visibility;<br />
            <br />
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
<strong>代码实现<br />
<br />
</strong><em><strong>客户端代码</strong><br />
<br />
</em>客户端的页面上有两个链接，用户单击链接后，向服务器端发送请求，并将返回信息显示到高亮层上。客户端的网页文件代码如下所示：</p>
<p>以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>&lt;html&gt;<br />
            <br />
            &lt;head&gt;<br />
            <br />
            &lt;title&gt;AJAX LightBox&lt;/title&gt;<br />
            <br />
            &lt;!-- 本例使用的css样式表文件--&gt;<br />
            <br />
            &lt;LINK href="lightbox.css" type=text/css rel=stylesheet&gt;<br />
            <br />
            &lt;!--prototype类文件--&gt;<br />
            <br />
            &lt;script type="text/html" class="wordstyle"&gt;asp?typeid=36" snap_preview_added="no"&gt;html" class="wordstyle"&gt;<br />
            <br />
            javascript" src="js/prototype.js" &gt;&lt;/script&gt;<br />
            <br />
            &lt;!--本例使用的html" class="wordstyle"&gt;javascript代码--&gt;<br />
            <br />
            &lt;script type="text/html" class="wordstyle"&gt;javascript" src="lightbox.js" &gt;&lt;/script&gt;<br />
            <br />
            &lt;/head&gt;<br />
            <br />
            &lt;body&gt;<br />
            <br />
            &lt;DIV id=container&gt;<br />
            <br />
            &lt;UL&gt;<br />
            <br />
            &lt;LI&gt;&lt;A class=lbOn href="getInfo.html" class="wordstyle"&gt;jsp?id=one"&gt;One&lt;/A&gt; <br />
            <br />
            &lt;/LI&gt;<br />
            <br />
            &lt;LI&gt;&lt;A class=lbOn href="getInfo.html" class="wordstyle"&gt;jsp?id=two"&gt;Two&lt;/A&gt; <br />
            <br />
            &lt;/LI&gt;<br />
            <br />
            &lt;/UL&gt;<br />
            <br />
            &lt;/div&gt;<br />
            <br />
            &lt;/body&gt;<br />
            <br />
            &lt;/html&gt;</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
另外，还需要设置该页面所使用CSS样式。lightbox.css样式表文件代码如下所示：</p>
<p>以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>#lightbox {<br />
            <br />
            BORDER-RIGHT: #fff 1px solid;<br />
            <br />
            BORDER-TOP: #fff 1px solid;<br />
            <br />
            DISPLAY: none; <br />
            <br />
            Z-INDEX: 9999; <br />
            <br />
            BACKGROUND: #fdfce9; <br />
            <br />
            LEFT: 50%; <br />
            <br />
            MARGIN: -220px 0px 0px -250px; <br />
            <br />
            BORDER-LEFT: #fff 1px solid; <br />
            <br />
            WIDTH: 500px; <br />
            <br />
            BORDER-BOTTOM: #fff 1px solid; <br />
            <br />
            POSITION: absolute; <br />
            <br />
            TOP: 50%; <br />
            <br />
            HEIGHT: 400px; <br />
            <br />
            TEXT-ALIGN: left<br />
            <br />
            }<br />
            <br />
            UNKNOWN {<br />
            <br />
            POSITION: fixed<br />
            <br />
            }<br />
            <br />
            #overlay {<br />
            <br />
            DISPLAY: none;<br />
            <br />
            Z-INDEX: 5000; FILTER: alpha(opacity=80); <br />
            <br />
            LEFT: 0px; <br />
            <br />
            WIDTH: 100%; <br />
            <br />
            POSITION: absolute; <br />
            <br />
            TOP: 0px; <br />
            <br />
            HEIGHT: 100%; <br />
            <br />
            BACKGROUND-COLOR: #000; moz-opacity: 0.8; opacity: .80<br />
            <br />
            }<br />
            <br />
            UNKNOWN {<br />
            <br />
            POSITION: fixed<br />
            <br />
            }<br />
            <br />
            .done#lightbox #lbLoadMessage {<br />
            <br />
            DISPLAY: none<br />
            <br />
            }<br />
            <br />
            .done#lightbox #lbContent {<br />
            <br />
            DISPLAY: block<br />
            <br />
            }<br />
            <br />
            .loading#lightbox #lbContent {<br />
            <br />
            DISPLAY: none<br />
            <br />
            }<br />
            <br />
            .loading#lightbox #lbLoadMessage {<br />
            <br />
            DISPLAY: block<br />
            <br />
            }<br />
            <br />
            .done#lightbox IMG {<br />
            <br />
            WIDTH: 100%; HEIGHT: 100%<br />
            <br />
            }<br />
            <br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<strong><em>客户端脚本<br />
<br />
</em></strong>由于浏览器对图层的支持不同，所以首先要确定客户端浏览器的类型。以下代码可用于判断客户端的浏览器和html" class="wordstyle"&gt;asp"</p>
<p>以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>snap_preview_added="no"&gt;操作系统。<br />
            <br />
            var detect = navigator.userAgent.toLowerCase();<br />
            <br />
            var OS,browser,version,total,thestring;<br />
            <br />
            function getBrowserInfo() {<br />
            <br />
            if (checkIt('konqueror')) {<br />
            <br />
            browser = "Konqueror";<br />
            <br />
            OS = "html" class="wordstyle"&gt;asp?typeid=60" snap_preview_added="no"&gt;Linux";<br />
            <br />
            }<br />
            <br />
            else if (checkIt('safari')) browser = "Safari"<br />
            <br />
            else if (checkIt('omniWeb')) browser = "OmniWeb"<br />
            <br />
            else if (checkIt('opera')) browser = "Opera"<br />
            <br />
            else if (checkIt('Webtv')) browser = "WebTV";<br />
            <br />
            else if (checkIt('icab')) browser = "iCab"<br />
            <br />
            else if (checkIt('msie')) browser = "Internet Explorer"<br />
            <br />
            else if (!checkIt('compatible')) {<br />
            <br />
            browser = "Netscape Navigator"<br />
            <br />
            version = detect.charAt(8);<br />
            <br />
            }<br />
            <br />
            else browser = "An unknown browser";<br />
            <br />
            if (!version) version = detect.charAt(place + thestring.length);<br />
            <br />
            if(!OS) {<br />
            <br />
            if (checkIt('linux')) OS = "Linux";<br />
            <br />
            else if (checkIt('x11')) OS = "Unix";<br />
            <br />
            else if (checkIt('mac')) OS = "Mac"<br />
            <br />
            else if (checkIt('win')) OS = "Windows"<br />
            <br />
            else OS = "an unknown operating system";<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            function checkIt(string) {<br />
            <br />
            place = detect.indexOf(string) + 1;<br />
            <br />
            thestring = string;<br />
            <br />
            return place;<br />
            <br />
            }<br />
            <br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
下面看一下网页加载时需要添加的方法。有关网页加载和初始化方法代码如下：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>//网页加载调用initialize和getBrowserInfo方法<br />
            <br />
            Event.observe(window, 'load', initialize, false);<br />
            <br />
            Event.observe(window, 'load', getBrowserInfo, false);<br />
            <br />
            //未加载时清空缓存<br />
            <br />
            Event.observe(window, 'unload', Event.unloadCache, false);<br />
            <br />
            //初始化方法<br />
            <br />
            function initialize(){<br />
            <br />
            //调用该方法为该页添加覆盖层和高亮显示层<br />
            <br />
            addLightboxMarkup();<br />
            <br />
            //为每个可高亮显示的元素创建lightbox对象<br />
            <br />
            lbox = document.getElementsByClassName('lbOn');<br />
            <br />
            for(i = 0; i &lt; lbox.length; i++) {<br />
            <br />
            valid = new lightbox(lbox[i]);<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            // 使用Dom方法创建覆盖层和高亮层<br />
            <br />
            function addLightboxMarkup() {<br />
            <br />
            bod = document.getElementsByTagName('body')[0];<br />
            <br />
            overlay = document.createElement('div');<br />
            <br />
            overlay.id = 'overlay';<br />
            <br />
            lb = document.createElement('div');<br />
            <br />
            lb.id = 'lightbox';<br />
            <br />
            lb.className = 'loading';<br />
            <br />
            lb.innerHTML = '&lt;div id="lbLoadMessage"&gt;' +<br />
            <br />
            '&lt;p&gt;Loading&lt;/p&gt;' +<br />
            <br />
            '&lt;/div&gt;';<br />
            <br />
            bod.appendChild(overlay);<br />
            <br />
            bod.appendChild(lb);<br />
            <br />
            }<br />
            <br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
<strong><em>封装lightbox类<br />
<br />
</em></strong>初始化数据时，为每个可高亮显示的链接创建了lightbox对象。该类的代码具体实现如下：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>var lightbox = Class.create();&nbsp; <br />
            <br />
            lightbox.prototype = {<br />
            <br />
            yPos : 0,<br />
            <br />
            xPos : 0,<br />
            <br />
            //构造方法,ctrl为创建该对象的元素<br />
            <br />
            initialize: function(ctrl) {<br />
            <br />
            //将该元素的链接赋值给this.content<br />
            <br />
            this.content = ctrl.href;<br />
            <br />
            //为该元素添加onclick事件activate方法<br />
            <br />
            Event.observe(ctrl, 'click', this.activate.bindAsEventListener(this), false);<br />
            <br />
            ctrl.onclick = function(){return false;};<br />
            <br />
            },<br />
            <br />
            //当单击链接时<br />
            <br />
            activate: function(){<br />
            <br />
            if (browser == 'Internet Explorer'){//判断为IE浏览器<br />
            <br />
            this.getScroll();<br />
            <br />
            this.prepareIE('100%', 'hidden');<br />
            <br />
            this.setScroll(0,0);<br />
            <br />
            this.hideSelects('hidden');//隐藏所有的&lt;select&gt;标记<br />
            <br />
            }<br />
            <br />
            //调用该类中的displayLightbox方法<br />
            <br />
            this.displayLightbox("block");<br />
            <br />
            },<br />
            <br />
            prepareIE: function(height, overflow){<br />
            <br />
            bod = document.getElementsByTagName('body')[0];<br />
            <br />
            bod.style.height = height;<br />
            <br />
            bod.style.overflow = overflow;<br />
            <br />
            <br />
            <br />
            htm = document.getElementsByTagName('html')[0];<br />
            <br />
            htm.style.height = height;<br />
            <br />
            htm.style.overflow = overflow; <br />
            <br />
            },<br />
            <br />
            hideSelects: function(visibility){<br />
            <br />
            selects = document.getElementsByTagName('select');<br />
            <br />
            for(i = 0; i &lt; selects.length; i++) {<br />
            <br />
            selects[i].style.visibility = visibility;<br />
            <br />
            }<br />
            <br />
            },<br />
            <br />
            getScroll: function(){<br />
            <br />
            if (self.pageYOffset) {<br />
            <br />
            this.yPos = self.pageYOffset;<br />
            <br />
            } else if (document.documentElement &amp;&amp; document.documentElement.scrollTop){<br />
            <br />
            this.yPos = document.documentElement.scrollTop; <br />
            <br />
            } else if (document.body) {<br />
            <br />
            this.yPos = document.body.scrollTop;<br />
            <br />
            }<br />
            <br />
            },<br />
            <br />
            setScroll: function(x, y){<br />
            <br />
            window.scrollTo(x, y); <br />
            <br />
            },<br />
            <br />
            displayLightbox: function(display){<br />
            <br />
            //将覆盖层显示<br />
            <br />
            $('overlay').style.display = display;<br />
            <br />
            //将高亮层显示<br />
            <br />
            $('lightbox').style.display = display;<br />
            <br />
            //如果不是隐藏状态,则调用该类中的loadInfo方法<br />
            <br />
            if(display != 'none') this.loadInfo();<br />
            <br />
            },<br />
            <br />
            //该方法发送Ajax请求<br />
            <br />
            loadInf function() {<br />
            <br />
            //当请求完成后调用本类中processInfo方法<br />
            <br />
            var myAjax = new Ajax.Request(<br />
            <br />
            this.content,<br />
            <br />
            {method: 'get', parameters: "", onComplete: this.processInfo.bindAsEvent Listener (this)}<br />
            <br />
            );<br />
            <br />
            },<br />
            <br />
            // 将返回的文本信息显示到高亮层上<br />
            <br />
            processInf function(response){<br />
            <br />
            //获得返回的文本数据<br />
            <br />
            var result = response.responseText;<br />
            <br />
            //显示到高亮层<br />
            <br />
            info = "&lt;div id='lbContent'&gt;" + result + "&lt;/div&gt;";<br />
            <br />
            //在info元素前插入一个元素<br />
            <br />
            new Insertion.Before($('lbLoadMessage'), info)<br />
            <br />
            //改变该元素的class name的值<br />
            <br />
            $('lightbox').className = "done"; <br />
            <br />
            //调用本类中actions方法<br />
            <br />
            this.actions();<br />
            <br />
            var ctrl=$('lightbox');<br />
            <br />
            //为高亮层添加事件处理方法reset<br />
            <br />
            Event.observe(ctrl, 'click', this.reset.bindAsEventListener(this), false);<br />
            <br />
            ctrl.onclick = function(){return false;};<br />
            <br />
            },<br />
            <br />
            //恢复初始状态 <br />
            <br />
            reset:function(){<br />
            <br />
            //隐藏覆盖层<br />
            <br />
            $('overlay').style.display="none";<br />
            <br />
            //清空返回数据<br />
            <br />
            $('lbContent').innerHTML="";<br />
            <br />
            //隐藏高亮层<br />
            <br />
            $('lightbox').style.display="none";<br />
            <br />
            },<br />
            <br />
            // Search through new links within the lightbox, and attach click event<br />
            <br />
            actions: function(){<br />
            <br />
            lbActions = document.getElementsByClassName('lbAction');<br />
            <br />
            for(i = 0; i &lt; lbActions.length; i++) {<br />
            <br />
            Event.observe(lbActions[i], 'click', <br />
            <br />
            this[lbActions[i].rel].bindAs EventListener(this), false);<br />
            <br />
            lbActions[i].onclick = function(){return false;};<br />
            <br />
            }<br />
            <br />
            }<br />
            <br />
            }</pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
提示：由于该对象比较复杂，读者可以仔细参阅代码的注释部分。<br />
<br />
<strong><em>服务器端代码</em></strong></p>
<p>服务器端首先获得查询中的&#8220;id&#8221;值，如果该值为null或为空，则设置为默认值。然后判断该值，并且返回相应的一段字符串信息。处理请求的getInfohtml" class="wordstyle"&gt;jsp页面代码如下：<br />
<br />
以下是引用片段：
<table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1">
    <tbody>
        <tr>
            <td class="code" bgcolor="#e6e6e6">
            <pre>&lt;%@ page language="java" import="java.util.*"%&gt;<br />
            <br />
            &lt;%<br />
            <br />
            //获得请求中id的值<br />
            <br />
            String imgID = request.getParameter("id");<br />
            <br />
            if (imgID==null||imgID.equals(""))//如果为null或为空<br />
            <br />
            imgID="one";//设定为默认值<br />
            <br />
            if ( imgID.equals("one"))//如果为one<br />
            <br />
            {<br />
            <br />
            %&gt;<br />
            <br />
            &lt;h3 id="cartitle" style="border-bottom: 1px solid #C0C0C0; margin-bottom: -5px"&gt;Porsche Carrera GT&lt;/h3&gt;<br />
            <br />
            &lt;p&gt;The Carrera GT has a 5.7 litre V10 internal combustion engine that produces <br />
            <br />
            605 SAE horsepower (451 kW). Porsche claims it will accelerate from 0 to 100 <br />
            <br />
            km/h (62 mph) in 3.9 seconds and has a maximum speed of 330 km/h (204 mph). <br />
            <br />
            With 605 hp, the car weighs 1,380 kg (3,042 lb). The Carrera GT is only <br />
            <br />
            offered with a six-speed manual transmission, in contrast to its rival the <br />
            <br />
            Ferrari Enzo that is only offered with sequential manual transmission. Also <br />
            <br />
            the Carrera GT is significantly less expensive than the Ferrari Enzo. The <br />
            <br />
            Ferrari Enzo is priced around $660,000 to the Carrera GT's $440,000. The <br />
            <br />
            Carrera GT is known for its high quality and reliability which makes it one of <br />
            <br />
            the best supercars ever.<br />
            <br />
            &lt;%}else{//否则<br />
            <br />
            %&gt;<br />
            <br />
            &lt;h3 id="cartitle" style="border-bottom: 1px solid #C0C0C0; margin-bottom: -5px"&gt;Ferrari Testarossa&lt;/h3&gt;<br />
            <br />
            &lt;p&gt;The Ferrari Testarossa is an V12 mid-engined sports car made by Ferrari. <br />
            <br />
            The name, which means &amp;quot;red head&amp;quot;, comes from the red painted cylinder heads on <br />
            <br />
            the flat-12 engine. The engine was technically a 180?V engine since it shared <br />
            <br />
            flat-plane crankshaft pins with opposing cylinders. Output was 390 hp (291 <br />
            <br />
            kW), and the car won many comparison tests and admirers - it was featured on <br />
            <br />
            the cover of Road &amp;amp; Track magazine nine times in just five years. Almost <br />
            <br />
            10,000 Testarossas, 512TRs, and 512Ms were produced, making this one of the <br />
            <br />
            most common Ferrari models despite its high price and exotic design.<br />
            <br />
            &lt;%}%&gt;<br />
            <br />
            html" class="wordstyle"&gt;aspx" snap_preview_added="spa" snap_icon_added="spa" act_suffix ic</pre>
            </td>
        </tr>
    </tbody>
</table>
<div align="right">【责任编辑：<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#119;&#97;&#110;&#103;&#99;&#103;&#64;&#53;&#49;&#99;&#116;&#111;&#46;&#99;&#111;&#109;">城尘</a> TEL：(010) 68476636-8003】</div>
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/148369.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-26 16:39 <a href="http://www.blogjava.net/WshmAndLily/articles/148369.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>prototype.js　1.4版开发者手册(强烈推荐) </title><link>http://www.blogjava.net/WshmAndLily/articles/147091.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Fri, 21 Sep 2007 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/147091.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/147091.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/147091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/147091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/147091.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: prototype.js是什么?万一你没有使用过大名鼎鼎的prototype.js，那么让我来告诉你，prototype.js是由SamStephenson写的一个javascript类库。这个构思奇妙，而且兼容标准的类库，能帮助你轻松建立有高度互动的web2.0特性的富客户端页面。如果你最近尝试使用它，你大概了解到文档并不是作者的一个强项。和在我以前使用这个类库的不少开发者一样，一开...&nbsp;&nbsp;<a href='http://www.blogjava.net/WshmAndLily/articles/147091.html'>阅读全文</a><img src ="http://www.blogjava.net/WshmAndLily/aggbug/147091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-21 13:58 <a href="http://www.blogjava.net/WshmAndLily/articles/147091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>查询助手功能介绍</title><link>http://www.blogjava.net/WshmAndLily/articles/144118.html</link><dc:creator>semovy</dc:creator><author>semovy</author><pubDate>Mon, 10 Sep 2007 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/WshmAndLily/articles/144118.html</guid><wfw:comment>http://www.blogjava.net/WshmAndLily/comments/144118.html</wfw:comment><comments>http://www.blogjava.net/WshmAndLily/articles/144118.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/WshmAndLily/comments/commentRss/144118.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/WshmAndLily/services/trackbacks/144118.html</trackback:ping><description><![CDATA[1 概述<br />
1.1 查询助手功能介绍<br />
在通常的BS软件项目中，查询助手使用频率非常高，其功能是点击图标，页面上元素的值为条件，到后台查询结果，弹出查询结果对话框，选择纪录，关闭对话框，并且把你选择的有关内容显示到父页面中指定的元素中。由于其友好的界面设计和操作性能，对用户和设计开发人员都有很大的吸引力，但存在开发效率低，复用性差，复杂度较高等问题。<br />
<br />
1.2 Ajax现状和项目实践<br />
随着Ajax的风靡全球，Google的推波助澜，优秀的界面风格，局部刷新的全新感受，给人耳目一新的印象。但由于Ajax诸多javascript脚本和后台应用的复杂性，使ajax的推广困难重重，国内的应用大多都是玩具级，距项目实用还有不小的差距，包括Microsoft，IBM，SUN都在积极攻关研发，以提高项目开发的实用性，降低开发难度。为了使用ajax在项目的实用性，针对查询助手功能的Ajax做了一些有益的尝试，特别愿意和大家分享。<br />
<br />
1.3 Ajax简介<br />
网上关于Ajax的文章汗牛充栋，具体的Ajax理论可以到网上搜索，这儿只做简单介绍：<br />
<br />
Ajax是Asynchronous JavaScript and XML的缩写。Ajax并不是一门新的语言或技术,它实际上是几项技术按一定的方式组合在一在同共的协作中发挥各自的作用，它包括：<br />
<br />
&#216; 使用XHTML和CSS标准化呈现<br />
<br />
&#216; 使用DOM实现动态显示和交互<br />
<br />
&#216; 使用XML和XSLT进行数据交换与处理<br />
<br />
&#216; 使用XMLHttpRequest进行异步数据读取;<br />
<br />
&#216; 使用JavaScript绑定和处理所有数据<br />
<br />
Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做,只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。<br />
<br />
<br />
<br />
<br />
<br />
2 Ajax查询助手功能设计理念<br />
查询助手功能设计的的Ajax的设计主要集中在从前台的jsp页面提出Ajax请求，所有的Ajax请求都提交给查询助手中间层，查询助手中间层自动创建查询助手具体实现类来实现查询助手的具体查询功能，查询助手具体实现类实现数据库查询并组织传回前台数据文本。传到前台后自动选择不同的JavaScript函数来解析数据，并显示到页面的Div或者直接显示到页面元素中。<br />
<br />
3 Ajax实现详述<br />
3.1 Jsp前台<br />
在Jsp中，点击查询助手图标，或者在输入框中打回车键，则显示如图3-1界面，Ajax从后台获取数据显示在前台页面上方，但此时页面并未刷新，并且缺省单选按钮选中第一行，第一行背景色为绿色。有两种操作可以选择： <br />
<br />
<br />
<br />
1） 选择是使用上下方向键来选择纪录，上下键移动时纪录背景色自动改变，单选按钮也自动选择。当决定选择某一行纪录时，点击回车键。<br />
<br />
2） 选择使用鼠标，当鼠标移动时，纪录的背景色发生改变。<br />
<br />
3） 当点击回车键，或者点击鼠标左键时则相关内容填充到具体的页面元素中，并把输入焦点自动下移到指定的输入框，并关闭选择界面。<br />
<br />
4） 如果你不想选择，也可以直接点击选择界面右上角的关闭图标<br />
<br />
具体代码如下：<br />
<br />
3.1.1 引入js，css文件<br />
&lt;link rel="stylesheet" href="&lt;%=request.getContextPath()%&gt;/tplife/css/maginfier.css" type="text/css"&gt;<br />
<br />
&lt;script type="text/javascript" src="&lt;%=request.getContextPath()%&gt;/js/ajax/maginfier.js"&gt;&lt;/script&gt;<br />
<br />
<br />
<br />
组织机构查询助手：&lt;br/&gt;&lt;img src = "&lt;%=request.getContextPath()%&gt;/images/magifiericon.gif" onclick="orgMaginfier(&#180;&lt;%=request.getContextPath()%&gt;&#180;,&#180;selOrg&#180;,&#180;DivShim&#180;,&#180;orgId,orgCode,orgName&#180;,&#180;0,2,1&#180;,&#180;message&#180;,&#180;&#180;,&#180;&#180;);"&gt;<br />
<br />
&lt;input type="text" id = "orgCode" style="width:300px" onkeydown="if(event.keyCode == 13){orgMaginfier(&#180;&lt;%=request.getContextPath()%&gt;&#180;,&#180;selOrg&#180;,&#180;DivShim&#180;,&#180;orgId,orgCode,orgName&#180;,&#180;0,2,1&#180;,&#180;message&#180;); gnIsSelectCtrl = 1;}else{}"&gt;<br />
<br />
&lt;input type="text" id = "orgName" style="width:300px"&gt;<br />
<br />
&lt;input type="hidden" id = "orgId"&gt;<br />
<br />
<br />
<br />
&lt;br/&gt; <br />
<br />
&lt;div id="selOrg" style="display:none; z-index:100" class="termFrame" &gt;&lt;/div&gt; <br />
<br />
&lt;iframe<br />
<br />
id="DivShim"<br />
<br />
src="javascript:false;"<br />
<br />
scrolling="no"<br />
<br />
frameborder="0"<br />
<br />
style="position:absolute; top:0px; left:0px; display:none;"&gt;<br />
<br />
&lt;/iframe&gt; <br />
<br />
3.1.1.1 Js文件内容：<br />
<br />
var xmlHttp;<br />
var maginfierName ;<br />
var displayName ;//显示结果Div<br />
var displayIFrame;//显示结果IFrame<br />
var posNames ;//回填页面元素数组，如currencyId,currencyAbbrName,currencyName<br />
var valueIndexs;//回填所需值的列号，如0,1,2<br />
var nextPos; //回填后focus的元素名<br />
var serverPath;<br />
var maginfierFunction;<br />
var tableHead = new Array();<br />
<br />
<br />
function createXMLHttpRequest() {<br />
<br />
if (window.ActiveXObject) {<br />
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");<br />
} <br />
else if (window.XMLHttpRequest) {<br />
xmlHttp = new XMLHttpRequest();<br />
}<br />
<br />
}<br />
function keyDowm(obj, pos, value, maginfierName0, maginfierDisplayName, maginfierDisplayIFrame)<br />
{<br />
if(event.keyCode == 13)//回车键<br />
{<br />
filled(pos, value, maginfierDisplayName, maginfierDisplayIFrame);<br />
}<br />
else if(event.keyCode == 40)//上移键<br />
{ <br />
document.getElementById(maginfierName0+"divrow" + obj).bgColor=&#180;&#180;; <br />
<br />
var t = eval(obj) + 1;<br />
if(document.getElementById(maginfierName0+"divrow" + t) != null)<br />
{<br />
document.getElementById(maginfierName0+"divrow" + t).bgColor=&#180;#CCFF99&#180;;<br />
} <br />
<br />
}<br />
else if(event.keyCode == 38)//下移键<br />
{<br />
document.getElementById(maginfierName0+"divrow" + obj).bgColor=&#180;&#180;; <br />
var t = eval(obj) - 1;<br />
if(t &gt;= 0)<br />
{<br />
document.getElementById(maginfierName0+"divrow" + t).bgColor=&#180;#CCFF99&#180;;<br />
}<br />
}<br />
<br />
}<br />
function closeDiv(maginfierDisplayName, maginfierDisplayIFrame)<br />
{<br />
_termFrame=getElement(maginfierDisplayName);<br />
_termFrame.style.display = &#180;none&#180; <br />
getElement(maginfierDisplayIFrame).style.display = &#180;none&#180;;<br />
}<br />
function operationRequest(queryString, postBlock) { <br />
<br />
var url = serverPath + "/AjaxMaginfier?" + queryString; <br />
<br />
createXMLHttpRequest();<br />
xmlHttp.onreadystatechange = handleStateChange;<br />
xmlHttp.open("POST", url, true); <br />
// postBlock = "获得界面元素"; <br />
//设置大块数据传输postBlock，这样可以解决大数据量传向后台。<br />
xmlHttp.send(postBlock);<br />
}<br />
// 获得界面元素<br />
function getElement(idString)<br />
{<br />
return(document.all?document.all[idString]:document.getElementById(idString));<br />
}<br />
// 鼠标移动<br />
function rollover(tdObject)<br />
{<br />
tdObject.bgColor=&#180;#CCFF99&#180;;<br />
}<br />
function rollout(tdObject)<br />
{<br />
tdObject.bgColor=&#180;&#180;;<br />
}<br />
<br />
function filled(keyStr, valueStr, maginfierDisplayName, maginfierDisplayIFrame)<br />
{ <br />
keys = keyStr.split(",");<br />
values = valueStr.split("&lt;c&gt;");<br />
<br />
for(i = 0; i &lt; keys.length; i++)<br />
{<br />
<br />
_test = getElement(keys[i]);<br />
_test.value = values[i];<br />
} <br />
_termFrame=getElement(maginfierDisplayName);<br />
_termFrame.style.display = &#180;none&#180; <br />
getElement(maginfierDisplayIFrame).style.display = &#180;none&#180;; <br />
if(document.getElementById(nextPos) != null)<br />
{ <br />
document.getElementById(nextPos).focus();<br />
}<br />
}<br />
<br />
function responseDisplay() { <br />
var responseText = xmlHttp.responseText;<br />
var responseContent = responseText.split("|");<br />
var dataText = responseContent[0];<br />
if(dataText.length == 0)<br />
{<br />
var displayStr = &#180;&lt;table width="98%"&gt;&lt;tr&gt;&lt;td align="right" style="border-bottom:0px"&gt;&lt;img src = "/fs/graphics/closeMaginfier.jpg" onclick="closeDiv(\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;input type="radio" id="&#180;+maginfierName+&#180;rdoAlert" name="rdo" onkeydown=" closeDiv(\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&#180; + &#180;&lt;font class="sfont" color="red"&gt;没有符合条件的记录，点任意键返回&lt;/font&gt;&#180;;<br />
displayAlert(displayStr);<br />
return;<br />
}<br />
var rows = dataText.split("&lt;r&gt;"); <br />
var _t=[]; <br />
var cols;<br />
var pos = "\&#180;" + posNames + "\&#180;"; <br />
<br />
for(var i = 0; i &lt; rows.length; i++) {<br />
cols = rows[i].split("&lt;c&gt;"); <br />
values = "\&#180;" ;<br />
valuesIndexArray = valueIndexs.split(",");<br />
for( j = 0; j &lt; valuesIndexArray.length; j++)<br />
{<br />
var temp = cols[eval(valuesIndexArray[j])];<br />
//回填时把null置换成空字符串<br />
if(temp == &#180;null&#180;)<br />
{<br />
temp = &#180;&#180;;<br />
}<br />
if(j &lt; valuesIndexArray.length - 1)<br />
{<br />
values = values + temp + "&lt;c&gt;";<br />
}<br />
else<br />
{<br />
values = values + temp + "\&#180;"; <br />
}<br />
} <br />
<br />
if(i == 0)<br />
{<br />
_t[i] = &#180;&lt;tr class="maginfierBody" id = "&#180;+maginfierName+&#180;divrow0" onmouseover="rollover(this)" onmouseout="rollout(this)" &gt;&lt;td width="5" align="center"&gt;&lt;input type="radio" id="&#180;+maginfierName+&#180;rdo" name="rdo" onkeydown=" keyDowm(&#180;+i+&#180;, &#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+maginfierName+&#180;\&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;);" &gt;&lt;/td&gt;&#180;;<br />
}<br />
else <br />
{<br />
_t[i] = &#180;&lt;tr class="maginfierBody" id = "&#180;+maginfierName+&#180;divrow&#180;+i+&#180;" onmouseover="rollover(this)" onmouseout="rollout(this)" &gt;&lt;td width="5" align="center"&gt;&lt;input type="radio" name="rdo" onkeydown=" keyDowm(&#180;+i+&#180;, &#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+maginfierName+&#180;\&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;);" &gt;&lt;/td&gt;&#180;;<br />
}<br />
//根据表头显示相关数据 <br />
for(var j = 1 ; j &lt; tableHead.length ; j++)<br />
{<br />
//在放大镜表格显示时，把null置换成空格显示<br />
if(cols[j] == &#180;null&#180;)<br />
{<br />
cols[j] = "&nbsp;";<br />
}<br />
_t[i] = _t[i] + &#180;&lt;td onclick="filled(&#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&lt;span class="rs"&gt;&#180;+cols[j]+&#180;&lt;/span&gt;&lt;/td&gt;&#180;;<br />
}<br />
_t[i] = _t[i] + &#180;&lt;/tr&gt;&#180;;<br />
<br />
} <br />
<br />
var tableHeadStr = addMaginfierHeader();<br />
<br />
displayStr = &#180;&lt;table width="98%"&gt;&lt;tr&gt;&lt;td align="right" style="border-bottom:0px"&gt;&lt;img src = "/fs/graphics/closeMaginfier.jpg" onclick="closeDiv(\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;table cellspacing="1" width="98%" cellpadding="1" class="ItemList"&gt;&#180;+ tableHeadStr +_t.join(&#180;&#180;)+&#180;&lt;/table&gt; &#180;;<br />
if(responseContent[1] != null)<br />
{<br />
pageParams = responseContent[1].split(",");<br />
prePageNo = parseInt(pageParams[2]) - 1;<br />
prePageFunction = maginfierFunction + "," +prePageNo+")";<br />
nextPageNo = parseInt(pageParams[2]) + 1;<br />
nextPageFunction = maginfierFunction + ", "+nextPageNo+")";<br />
<br />
displayStr += &#180;&lt;br&gt; &lt;a href="javascript:if(&#180;+prePageNo+&#180; == 0){alert(\&#180;已经是第一页了\&#180;);}else{&#180;+prePageFunction+&#180;} "&gt;上一页&lt;/a&gt;&#180;;<br />
displayStr += &#180;&lt;font class="sfont"&gt; | 第&#180;+pageParams[2]+&#180;页 | &lt;/font&gt; &#180;;<br />
displayStr += &#180;&lt;a href="javascript:if(&#180;+nextPageNo+&#180; &gt; &#180;+pageParams[1]+&#180;){alert(\&#180;已经是最后一页了\&#180;); }else{&#180;+nextPageFunction+&#180;}"&gt;下一页&lt;/a&gt;&#180;;<br />
displayStr += &#180;&lt;font class="sfont"&gt; | 共&#180;+pageParams[1]+&#180;页 | 共&#180;+pageParams[0]+&#180;行&lt;/font&gt;&#180;; <br />
}<br />
<br />
displayMaginfier(displayStr);<br />
<br />
}<br />
function test()<br />
{<br />
var a = &#180;23,,,43,23&#180;;<br />
var b = a.split(",");<br />
alert(b.length);<br />
}<br />
function addMaginfierHeader()<br />
{<br />
var tableHeadStr = &#180;&lt;tr class="maginfierTitle"&gt;&lt;td width="5" align="center" &gt;&lt;/td&gt;&#180;;<br />
for(i = 1 ; i &lt; tableHead.length ; i++)<br />
{<br />
tableHeadStr = tableHeadStr + &#180;&lt;td align="center" &gt;&#180; + tableHead[i] + "&lt;/td&gt;"<br />
}<br />
tableHeadStr = tableHeadStr + "&lt;/tr&gt;";<br />
return tableHeadStr;<br />
}<br />
function displayAlert(displayStr)<br />
{<br />
displayDiv = getElement(displayName); <br />
displayDiv.innerHTML = displayStr; <br />
displayDiv.style.display=&#180;block&#180;; <br />
<br />
IfrRef = getElement(displayIFrame);<br />
IfrRef.style.width = displayDiv.offsetWidth;<br />
IfrRef.style.height = displayDiv.offsetHeight;<br />
IfrRef.style.top = displayDiv.style.top;<br />
IfrRef.style.left = displayDiv.style.left;<br />
IfrRef.style.zIndex = displayDiv.style.zIndex - 1;<br />
IfrRef.style.display = "block";<br />
<br />
document.getElementById(maginfierName+"rdoAlert").checked = true; <br />
document.getElementById(maginfierName+"rdoAlert").focus(); <br />
}<br />
function displayMaginfier(displayStr)<br />
{<br />
displayDiv = getElement(displayName); <br />
displayDiv.innerHTML = displayStr; <br />
displayDiv.style.display=&#180;block&#180;; <br />
<br />
<br />
IfrRef = getElement(displayIFrame);<br />
IfrRef.style.width = displayDiv.offsetWidth;<br />
IfrRef.style.height = displayDiv.offsetHeight;<br />
IfrRef.style.top = displayDiv.style.top;<br />
IfrRef.style.left = displayDiv.style.left;<br />
IfrRef.style.zIndex = displayDiv.style.zIndex - 1;<br />
IfrRef.style.display = "block";<br />
<br />
document.getElementById(maginfierName+"divrow0").bgColor=&#180;#CCFF99&#180;;<br />
document.getElementById(maginfierName+"rdo").checked = true; <br />
document.getElementById(maginfierName+"rdo").focus();<br />
}<br />
<br />
/*具体放大镜页面处理方法*/<br />
function handleStateChange() { <br />
if(xmlHttp.readyState == 4) {<br />
if(xmlHttp.status == 200) { <br />
responseDisplay(); <br />
}<br />
}<br />
}<br />
function initMaginfierParas(serverPath0, divName, iFrameName, posNames0, valueIndexs0, nextPos0)<br />
{<br />
serverPath = serverPath0; <br />
displayName = divName;<br />
displayIFrame = iFrameName;<br />
posNames = posNames0;<br />
valueIndexs = valueIndexs0<br />
nextPos = nextPos0;<br />
}<br />
<br />
/*具体放大镜JavaScript*/<br />
<br />
//组织机构放大镜<br />
function orgMaginfier(serverPath0, divName, iFrameName, posNames0,valueIndexs0, nextPos0, orgCode, orgId, transTypeId, maginfierType, pageNo)<br />
{ <br />
initMaginfierParas(serverPath0, divName, iFrameName, posNames0, valueIndexs0, nextPos0);<br />
maginfierName = &#180;OrgMaginfier&#180; + divName; <br />
maginfierFunction = "orgMaginfier(\&#180;"+serverPath0+"\&#180;, \&#180;"+divName+"\&#180;, \&#180;"+iFrameName+"\&#180;, \&#180;"+posNames0+"\&#180;,\&#180;"+valueIndexs0+"\&#180;, \&#180;"+nextPos0+"\&#180;, \&#180;"+orgCode+"\&#180;, \&#180;"+orgId+"\&#180;, \&#180;"+transTypeId+"\&#180;, \&#180;"+maginfierType+"\&#180;";<br />
<br />
len = tableHead.length;<br />
tableHead.splice(0, len); <br />
tableHead[0] = "单位ID";<br />
tableHead[1] = "单位编号"; <br />
tableHead[2] = "单位名称"; <br />
tableHead[3] = "单位英文名称";<br />
<br />
queryString = "maginfierClassName=OrgMaginfier&amp;orgCode="+orgCode+"&amp;orgId="+orgId+"&amp;maginfierType="+maginfierType+"&amp;transTypeId="+transTypeId+"&amp;pageNo="+pageNo;<br />
<br />
operationRequest(queryString);<br />
}<br />
<br />
<br />
<br />
3.1.1.2 Css文件内容：<br />
<br />
<br />
/* 界面样式 */<br />
<br />
.termFrame{<br />
<br />
width:298px !important;<br />
<br />
width:500px;<br />
<br />
overflow:auto;<br />
<br />
height:360px; <br />
<br />
scrollbar-face-color: #FFFFCC; scrollbar-shadow-color: #FFFFCC; scrollbar-highlight-color: #FFFFCC; scrollbar-3dlight-color: #FFFFCC; scrollbar-darkshadow-color: #6699CC; scrollbar-track-color: #FFFFCC; scrollbar-arrow-color: #99CCFF;<br />
<br />
<br />
<br />
margin-top:1px !important;<br />
<br />
margin-top:0; <br />
<br />
border:1px solid #999999;<br />
<br />
background-color:#FFFFFF; <br />
<br />
position:absolute;<br />
<br />
cursor:hand;<br />
<br />
padding:2px;<br />
<br />
font-size:70%;<br />
<br />
z-index:100<br />
<br />
}<br />
<br />
.maginfierTitle {<br />
<br />
BORDER-RIGHT: 1px; BORDER-TOP: 1px;BORDER-LEFT: 1px; BORDER-BOTTOM: 1px;BACKGROUND-COLOR: #456795; color: #FFFFFF;<br />
<br />
}<br />
<br />
.maginfierBody {<br />
<br />
BORDER-RIGHT: 1px;BORDER-TOP: 1px;BORDER-LEFT: 1px;BORDER-BOTTOM: 1px;<br />
<br />
}<br />
<br />
3.1.2 当点击查询助手图标时（例如查询组织机构）：<br />
function orgMaginfier(serverPath0, divName, iFrameName, posNames0,valueIndexs0, nextPos0, orgCode, orgId, transTypeId, maginfierType, pageNo)<br />
<br />
{ <br />
<br />
initMaginfierParas(serverPath0, divName, iFrameName, posNames0, valueIndexs0, nextPos0);<br />
<br />
maginfierName = &#180;OrgMaginfier&#180; + divName; <br />
<br />
maginfierFunction = "orgMaginfier(\&#180;"+serverPath0+"\&#180;, \&#180;"+divName+"\&#180;, \&#180;"+iFrameName+"\&#180;, \&#180;"+posNames0+"\&#180;,\&#180;"+valueIndexs0+"\&#180;, \&#180;"+nextPos0+"\&#180;, \&#180;"+orgCode+"\&#180;, \&#180;"+orgId+"\&#180;, \&#180;"+transTypeId+"\&#180;, \&#180;"+maginfierType+"\&#180;";<br />
<br />
<br />
<br />
len = tableHead.length;<br />
<br />
tableHead.splice(0, len); <br />
<br />
tableHead[0] = "单位ID";<br />
<br />
tableHead[1] = "单位编号"; <br />
<br />
tableHead[2] = "单位名称"; <br />
<br />
tableHead[3] = "单位英文名称";<br />
<br />
<br />
<br />
queryString = "maginfierClassName=OrgMaginfier&amp;orgCode="+orgCode+"&amp;orgId="+orgId+"&amp;maginfierType="+maginfierType+"&amp;transTypeId="+transTypeId+"&amp;pageNo="+pageNo;<br />
<br />
<br />
<br />
operationRequest(queryString);<br />
<br />
}<br />
<br />
3.1.3 Js中的处理请求的函数<br />
function operationRequest(queryString, postBlock) { <br />
<br />
<br />
<br />
var url = serverPath + "/AjaxMaginfier?" + queryString; <br />
<br />
<br />
<br />
createXMLHttpRequest();<br />
<br />
xmlHttp.onreadystatechange = handleStateChange;<br />
<br />
xmlHttp.open("POST", url, true); <br />
<br />
// postBlock = "获得界面元素"; <br />
<br />
//设置大块数据传输postBlock，这样可以解决大数据量传向后台。<br />
<br />
xmlHttp.send(postBlock);<br />
<br />
}<br />
<br />
3.1.4 当数据传回前台后<br />
//该函数的名称不要改变，因为我在js文件中决定了用该函数来处理传回的数据<br />
<br />
function handleStateChange() { <br />
<br />
if(xmlHttp.readyState == 4) {<br />
<br />
if(xmlHttp.status == 200) { <br />
<br />
responseDisplay(); <br />
<br />
}<br />
<br />
}<br />
<br />
}<br />
<br />
3.1.5 具体处理传回的数据：<br />
function responseDisplay() { <br />
<br />
var responseText = xmlHttp.responseText;<br />
<br />
var responseContent = responseText.split("|");<br />
<br />
var dataText = responseContent[0];<br />
<br />
if(dataText.length == 0)<br />
<br />
{<br />
<br />
var displayStr = rightSpace + &#180;&lt;img src = "/fs/graphics/closeMaginfier.jpg" onclick="closeDiv(\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&lt;br&gt;&lt;input type="radio" id="&#180;+maginfierName+&#180;rdoAlert" name="rdo" onkeydown=" closeDiv(\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&#180; + &#180;&lt;font class="sfont" color="red"&gt;没有符合条件的记录，点任意键返回&lt;/font&gt;&#180;;<br />
<br />
displayAlert(displayStr);<br />
<br />
return;<br />
<br />
}<br />
<br />
var rows = dataText.split(";"); <br />
<br />
var _t=[]; <br />
<br />
var cols;<br />
<br />
var pos = "\&#180;" + posNames + "\&#180;"; <br />
<br />
<br />
<br />
for(var i = 0; i &lt; rows.length; i++) {<br />
<br />
cols = rows[i].split(","); <br />
<br />
values = "\&#180;" ;<br />
<br />
valuesIndexArray = valueIndexs.split(",");<br />
<br />
for( j = 0; j &lt; valuesIndexArray.length; j++)<br />
<br />
{<br />
<br />
var temp = cols[eval(valuesIndexArray[j])];<br />
<br />
//回填时把null置换成空字符串<br />
<br />
if(temp == &#180;null&#180;)<br />
<br />
{<br />
<br />
temp = &#180;&#180;;<br />
<br />
}<br />
<br />
if(j &lt; valuesIndexArray.length - 1)<br />
<br />
{<br />
<br />
values = values + temp + ",";<br />
<br />
}<br />
<br />
else<br />
<br />
{<br />
<br />
values = values + temp + "\&#180;"; <br />
<br />
}<br />
<br />
} <br />
<br />
<br />
<br />
if(i == 0)<br />
<br />
{<br />
<br />
_t[i] = &#180;&lt;tr class="maginfierBody" id = "&#180;+maginfierName+&#180;divrow0" onmouseover="rollover(this)" onmouseout="rollout(this)" &gt;&lt;td width="5" align="center"&gt;&lt;input type="radio" id="&#180;+maginfierName+&#180;rdo" name="rdo" onkeydown=" keyDowm(&#180;+i+&#180;, &#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+maginfierName+&#180;\&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;);" &gt;&lt;/td&gt;&#180;;<br />
<br />
}<br />
<br />
else <br />
<br />
{<br />
<br />
_t[i] = &#180;&lt;tr class="maginfierBody" id = "&#180;+maginfierName+&#180;divrow&#180;+i+&#180;" onmouseover="rollover(this)" onmouseout="rollout(this)" &gt;&lt;td width="5" align="center"&gt;&lt;input type="radio" name="rdo" onkeydown=" keyDowm(&#180;+i+&#180;, &#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+maginfierName+&#180;\&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;);" &gt;&lt;/td&gt;&#180;;<br />
<br />
}<br />
<br />
//根据表头显示相关数据 <br />
<br />
for(var j = 0 ; j &lt; tableHead.length ; j++)<br />
<br />
{<br />
<br />
//在查询助手表格显示时，把null置换成空格显示<br />
<br />
if(cols[j] == &#180;null&#180;)<br />
<br />
{<br />
<br />
cols[j] = "&nbsp;";<br />
<br />
}<br />
<br />
_t[i] = _t[i] + &#180;&lt;td onclick="filled(&#180;+pos+&#180;, &#180;+values+&#180;,\&#180;&#180;+displayName+&#180;\&#180;,\&#180;&#180;+displayIFrame+&#180;\&#180;)"&gt;&lt;span class="rs"&gt;&#180;+cols[j]+&#180;&lt;/span&gt;&lt;/td&gt;&#180;;<br />
<br />
}<br />
<br />
_t[i] = _t[i] + &#180;&lt;/tr&gt;&#180;;<br />
<br />
<br />
<br />
} //显示表头内容<br />
<br />
function addMaginfierHeader()<br />
<br />
{<br />
<br />
var tableHeadStr = &#180;&lt;tr class="maginfierTitle"&gt;&lt;td width="5" align="center" &gt;&lt;/td&gt;&#180;;<br />
<br />
for(i = 0 ; i &lt; tableHead.length ; i++)<br />
<br />
{<br />
<br />
tableHeadStr = tableHeadStr + &#180;&lt;td align="center" &gt;&#180; + tableHead[i] + "&lt;/td&gt;"<br />
<br />
}<br />
<br />
tableHeadStr = tableHeadStr + "&lt;/tr&gt;";<br />
<br />
return tableHeadStr;<br />
<br />
}<br />
<br />
//如果未查询到纪录，显示提示信息 <br />
<br />
function displayAlert(displayStr)<br />
<br />
{<br />
<br />
_termFrame=getElement(displayName);<br />
<br />
<br />
<br />
_termFrame.innerHTML = displayStr;<br />
<br />
// 显示结果<br />
<br />
<br />
<br />
_termFrame.style.display=&#180;block&#180;; <br />
<br />
<br />
<br />
IfrRef = getElement(displayIFrame);<br />
<br />
IfrRef.style.width = _termFrame.offsetWidth;<br />
<br />
IfrRef.style.height = _termFrame.offsetHeight;<br />
<br />
IfrRef.style.top = _termFrame.style.top;<br />
<br />
IfrRef.style.left = _termFrame.style.left;<br />
<br />
IfrRef.style.zIndex = _termFrame.style.zIndex - 1;<br />
<br />
IfrRef.style.display = "block";<br />
<br />
<br />
<br />
document.getElementById(maginfierName+"rdoAlert").checked = true;<br />
<br />
<br />
<br />
document.getElementById(maginfierName+"rdoAlert").focus();<br />
<br />
<br />
<br />
}<br />
<br />
//显示查询助手<br />
<br />
function displayMaginfier(displayStr)<br />
<br />
{<br />
<br />
_termFrame=getElement(displayName);<br />
<br />
<br />
<br />
_termFrame.innerHTML = displayStr;<br />
<br />
// 显示结果<br />
<br />
_termFrame.style.display=&#180;block&#180;; <br />
<br />
//setHidden(overlaySelEles);<br />
<br />
//_termFrame.style.visibility="visible";<br />
<br />
IfrRef = getElement(displayIFrame);<br />
<br />
IfrRef.style.width = _termFrame.offsetWidth;<br />
<br />
IfrRef.style.height = _termFrame.offsetHeight;<br />
<br />
IfrRef.style.top = _termFrame.style.top;<br />
<br />
IfrRef.style.left = _termFrame.style.left;<br />
<br />
IfrRef.style.zIndex = _termFrame.style.zIndex - 1;<br />
<br />
IfrRef.style.display = "block";<br />
<br />
<br />
<br />
document.getElementById(maginfierName+"divrow0").bgColor=&#180;#CCFF99&#180;;<br />
<br />
document.getElementById(maginfierName+"rdo").checked = true;<br />
<br />
<br />
<br />
document.getElementById(maginfierName+"rdo").focus();<br />
<br />
}<br />
<br />
3.2 Servlet后台<br />
选择Servlet作为后台，是因为如果采用Struts Action为后台处理程序，则必须指定要返回的页面。而使用Servlet则没有这个要求。默认返回到请求页面。而这个查询助手Servlet接受所有的查询助手请求，根据前台传来的查询助手实现类名称参数，由Spring创建查询助手实现类对象，该对象实现了查询助手接口（MaginfierInterface），从而获取返回值文本。返回到前台。<br />
<br />
3.2.1 具体代码如下：<br />
3.2.1.1 查询助手Servlet<br />
public void doGet(HttpServletRequest request, HttpServletResponse response)<br />
<br />
throws ServletException, IOException {<br />
<br />
String maginfierClassName = request.getParameter("maginfierClassName"); <br />
<br />
MaginfierFactory factory = MaginfierFactory.getInstance();<br />
<br />
MaginfierInterface maginfier = factory.createMaginfier(maginfierClassName);<br />
<br />
String ret = maginfier.getReturnValue(request);<br />
<br />
System.out.println("ret = " + ret);<br />
<br />
response.setContentType("text/xml;charset=GBK");<br />
<br />
PrintWriter out = response.getWriter();<br />
<br />
<br />
<br />
out.write(ret);<br />
<br />
<br />
<br />
out.close();<br />
<br />
}<br />
<br />
3.2.1.2 Web.xml配置<br />
3.2.1.2.1 在Ｗｅｂ．ｘｍｌ中配置查询助手Servlet<br />
&lt;servlet&gt;<br />
<br />
&lt;servlet-name&gt;AjaxMaginfier&lt;/servlet-name&gt;<br />
<br />
&lt;servlet-class&gt;com.iss.fs.web.module.example.AjaxMaginfier&lt;/servlet-class&gt;<br />
<br />
&lt;!—在系统初次启动时，初始化1次--&gt; <br />
<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
<br />
&lt;/servlet&gt;<br />
<br />
&lt;servlet-mapping&gt;<br />
<br />
&lt;servlet-name&gt;AjaxMaginfier&lt;/servlet-name&gt;<br />
<br />
&lt;url-pattern&gt;/AjaxMaginfier&lt;/url-pattern&gt;<br />
<br />
&lt;/servlet-mapping&gt;<br />
<br />
3.2.1.3 查询助手具体实现类<br />
3.2.1.3.1 实现查询助手接口方法<br />
public class CurrencyMaginfier implements MaginfierInterface<br />
<br />
{<br />
<br />
public String getReturnValue(HttpServletRequest request)<br />
<br />
{<br />
<br />
List list = null;<br />
<br />
StringBuffer results = new StringBuffer();<br />
<br />
CurrencyDAO dao = new CurrencyDAO();<br />
<br />
String currencyAbbrName = request.getParameter("currencyAbbrName");<br />
<br />
String responsibilityId = request.getParameter("responsibilityId");<br />
<br />
if(currencyAbbrName == null || currencyAbbrName.equals("") || currencyAbbrName.equals("undefined"))<br />
<br />
{<br />
<br />
currencyAbbrName = "";<br />
<br />
}<br />
<br />
if(responsibilityId == null || responsibilityId.equals("") || responsibilityId.equals("undefined"))<br />
<br />
{<br />
<br />
responsibilityId = "-1";<br />
<br />
}<br />
<br />
try<br />
<br />
{<br />
<br />
list = dao.getMaginfierResults(currencyAbbrName, responsibilityId);<br />
<br />
<br />
<br />
}<br />
<br />
catch (Exception ex)<br />
<br />
{<br />
<br />
ex.printStackTrace();<br />
<br />
}<br />
<br />
if (list != null)<br />
<br />
{<br />
<br />
Currency currency = null; <br />
<br />
for(int i = 0 ; i &lt; list.size(); i++)<br />
<br />
{<br />
<br />
currency = (Currency)list.get(i);<br />
<br />
results.append(currency.getID()).append(",");<br />
<br />
results.append(currency.getCurrencyAbbrName()).append(",");<br />
<br />
results.append(currency.getCurrencyName()); <br />
<br />
if(i &lt; (list.size() - 1))<br />
<br />
{<br />
<br />
results.append(";");<br />
<br />
}<br />
<br />
}<br />
<br />
}<br />
<br />
return results.toString();<br />
<br />
}<br />
<br />
}<br />
<br />
3.3 技术难点解析<br />
3.3.1 查询助手函数参数设计：<br />
固定参数：serverPath, divName, iFrameName, posNames,valueIndexs, nextPos<br />
<br />
serverPath：表示webserver的地址，如：/myapp<br />
<br />
divName：显示选择界面的Div名称<br />
<br />
iFrameName：显示选择界面的Ifranme名称，因为IE的缺陷，div显示时不能覆盖下面的选择框，所以我们使用Iframe作为div的底板。<br />
<br />
posNames：选择纪录后回显的页面元素，如：orgId,orgName,orgCode<br />
<br />
valueIndexs：对应回显页面元素，纪录的列序号，如 0,2,1<br />
<br />
nextPos：选择结束后要把输入焦点，移动到下一个页面元素名称<br />
<br />
固定参数后面的参数，不同的查询助手有不同参数列表，主要是条件数据。<br />
<br />
3.3.2 查询助手选择界面的表头设计：<br />
不同的查询助手选择界面有不同的表头，我们使用js的全局数组变量来存储，每个查询助手使用前都先清空表头数组，使用splice(0, len)<br />
<br />
len = tableHead.length;<br />
<br />
tableHead.splice(0, len); <br />
<br />
tableHead[0] = "外部账户ID";<br />
<br />
tableHead[1] = "外部账户编号";<br />
<br />
tableHead[2] = "外部账户名称";<br />
<br />
tableHead[3] = "外部银行名称";<br />
<br />
tableHead[4] = "机构号";<br />
<br />
tableHead[5] = "联行号";<br />
<br />
显示表头：<br />
<br />
var tableHeadStr = &#180;&lt;tr class="maginfierTitle"&gt;&lt;td width="5" align="center" &gt;&lt;/td&gt;&#180;;<br />
<br />
for(i = 0 ; i &lt; tableHead.length ; i++)<br />
<br />
{<br />
<br />
tableHeadStr = tableHeadStr + &#180;&lt;td align="center" &gt;&#180; + tableHead[i] + "&lt;/td&gt;"<br />
<br />
}<br />
<br />
tableHeadStr = tableHeadStr + "&lt;/tr&gt;";<br />
<br />
3.3.3 处理后台传来的数据：<br />
3.3.3.1.1 接受数据：<br />
var responseText = xmlHttp.responseText;<br />
<br />
3.3.3.1.2 查询无纪录处理：<br />
if(responseText.length == 0)<br />
<br />
{<br />
<br />
var displayStr = rightSpace + &#180;&lt;img src = "/fs/graphics/closeMaginfier.jpg" onclick="closeDiv()"&gt;&lt;br&gt;&lt;input type="radio" id="&#180;+maginfierName+&#180;rdoAlert" name="rdo" onkeydown=" closeDiv()"&gt;&#180; + &#180;&lt;font class="sfont" color="red"&gt;没有符合条件的记录，点任意键返回&lt;/font&gt;&#180;;<br />
<br />
displayAlert(displayStr);<br />
<br />
return;<br />
<br />
}<br />
<br />
Onkeydown表示响应任意键，则关闭查询助手选择界面。<br />
<br />
Onclick 表示响应鼠标点击<br />
<br />
3.3.3.1.3 显示查询结果：<br />
因为我们在后台把查询数据封装成文本传回前台，所以到前台后要解析文本，我不使用xml文本，数据封装规则是纪录间用&#8220;；&#8221;隔离，列之间用&#8220;，&#8221;隔离。同样到前台后使用相同的规则解析数据。<br />
<br />
把文本数据分成若干行数据<br />
<br />
var rows = responseText.split(";");<br />
<br />
3.4 总结<br />
Ajax实现查询助手功能是Ajax在项目中实战的一个小小的例子，根据以后的研发，将会产生更多更好的应用，本人在文档的Ajax简介部分引用了别的文档的说明，在查询助手的实现中借鉴了Google的Suggest设计理念，Suggest实现是直接从后台传来表格Frame，后台定义显示逻辑，在查询助手的设计中，前台来决定显示逻辑，后台仅提供数据，实现数据和显示的分离，这样就会造成前台需要解析数据文本，处理显示逻辑的Javascript函数，显得前台的JavaScript比较多，但我认为这是可以接受的，因为Ajax主要是前台逻辑。另外，Ajax查询助手的后台实现采用了Spring Bean管理容器，只是为了后期扩展的方便性，借助Spring容器管理的强大功能，实现类似工厂模式的功能。 
<img src ="http://www.blogjava.net/WshmAndLily/aggbug/144118.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/WshmAndLily/" target="_blank">semovy</a> 2007-09-10 23:22 <a href="http://www.blogjava.net/WshmAndLily/articles/144118.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>