﻿<?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-Sonny Li</title><link>http://www.blogjava.net/sonnylys/</link><description>                       熟能生巧，巧夺天工！
                 </description><language>zh-cn</language><lastBuildDate>Tue, 28 Apr 2026 19:02:50 GMT</lastBuildDate><pubDate>Tue, 28 Apr 2026 19:02:50 GMT</pubDate><ttl>60</ttl><item><title>请高手解救小弟，万分感激！使用dom4j如何实现按Element的某个属性排序？？？</title><link>http://www.blogjava.net/sonnylys/archive/2009/05/15/270844.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Fri, 15 May 2009 06:47:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2009/05/15/270844.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/270844.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2009/05/15/270844.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/270844.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/270844.html</trackback:ping><description><![CDATA[<font style="background-color: #cde7cd"><font style="background-color: #cde7cd">请高手解救小弟，万分感激！使用dom4j如何实现按Element的某个属性排序？？？如下面xml文件<br />
<br />
<font style="background-color: #cde7cd">&lt;?xml version="1.0" encoding="GBK"?&gt;</font><br />
&lt;books&gt;<br />
&nbsp; &lt;book name="<font style="background-color: #cde7cd"><font style="background-color: #cde7cd">请高手解救下小弟</font></font>" price="30.00"&gt;<br />
&nbsp; &lt;book name="<font style="background-color: #cde7cd">万分感激</font>" price="40.00"&gt;<br />
&nbsp; &lt;book name="谢谢大家的回应" price="50.00"&gt;<br />
&nbsp;&lt;/books&gt;<br />
<br />
我想获取books节点下的所有book子节点，并按price属性排序，如何实现？<br />
<br />
本人阅读dom4j的文档，找到<strong>org.dom4j.xpath.DefaultXPath</strong>.<code><strong><a href="file:///C:/Documents%20and%20Settings/idealhome/桌面/dom4j-1.6.1/dom4j-1.6.1/docs/apidocs/org/dom4j/xpath/DefaultXPath.html#selectNodes(java.lang.Object, org.dom4j.XPath)">selectNodes</a></strong>(<a title="class or interface in java.lang" href="http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html">Object</a>&nbsp;context, <a title="interface in org.dom4j" href="file:///C:/Documents%20and%20Settings/idealhome/桌面/dom4j-1.6.1/dom4j-1.6.1/docs/apidocs/org/dom4j/XPath.html">XPath</a>&nbsp;sortXPath)方法第二个参数"sortXPath"好像是用来排序的，但不知如何写sortXPath参数。<br />
<br />
先谢过，在线等。<br />
<br />
<br />
说明：本人不需要xsl排序方案。<br />
</code><br />
</font></font>

<img src ="http://www.blogjava.net/sonnylys/aggbug/270844.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2009-05-15 14:47 <a href="http://www.blogjava.net/sonnylys/archive/2009/05/15/270844.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自编 jtle(javascript template language engine) javascript模板语言引擎, 轻松处理json数据!</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/25/202677.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Sun, 25 May 2008 02:24:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/25/202677.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/202677.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/25/202677.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/202677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/202677.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 自编 jtle(javascript template language engine) javascript模板语言引擎, 轻松处理json数据! jtle是个简单的javascript板模解析器,可以轻松操作json数据,基于json数据的ajax应用可以很方便的实现数据显示逻辑!<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/sonnylys/archive/2008/05/25/202677.html'>阅读全文</a><img src ="http://www.blogjava.net/sonnylys/aggbug/202677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-05-25 10:24 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/25/202677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Prototype学习志 之 bind方法的“谜”迷人色彩！</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Thu, 08 May 2008 14:37:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/199080.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/199080.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/199080.html</trackback:ping><description><![CDATA[<p><span style="color: red">&nbsp;&nbsp;</span>&nbsp;&nbsp;&nbsp;Prototype的bind方法常常把许多学习它的人弄得糊糊涂涂，google和baidu一番后还是一塌胡涂！本人也如此；本人觉得它是个从&#8220;谜人&#8221;到&#8220;迷人&#8221;的方法。此文将发表个人对此方法的理解，希望能帮助大家成功渡&#8220;谜&#8221;，到达&#8220;迷人&#8221;的彼岸！<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&lt;script src="prototype.js"&gt;&lt;/script&gt; //@7<br />
&nbsp;&lt;script type="text/javascript"&gt;<br />
&nbsp;&nbsp; /**********************************<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; *&nbsp; 实现渲染一个带有"上一页"和"下一页"的组件,点击"上一页",当前页减1,点击"下一页"当前页加1<br />
&nbsp;&nbsp;&nbsp; *<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp; function PagesSystem(container){<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 10; //当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv = document.getElementById(container); //容器<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.init = function() { //将组件画出来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.changePage = function(evtObj) { //根据点击后传过来的参数决定是加1或是减1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(evtObj == "next") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页加1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(evtObj == "pre"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处不作if(this.currentPage ==1) return;限制为了体现当传入的参数为"pre"时，下面的alert()一定会执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage -= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页减1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage = function() {//创建上一页组件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.changePage; //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "上一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage = function() {//创建下一页组件<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.changePage; //@2 当点击此（"下一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "下一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageSysDiv.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.init(); //执行初始化<br />
&nbsp;&nbsp; } <br />
&nbsp;&nbsp; function testUse(msg){//@3在提出问题环节用到<br />
&nbsp;&nbsp;&nbsp;&nbsp; alert(msg);<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; window.onload = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; var ps = new PagesSystem("pageDiv");<br />
&nbsp;&nbsp; }<br />
&nbsp;&lt;/script&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp; &lt;div id="pageDiv"&gt;&lt;/div&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;</p>
<p>二、分析代码，提出问题，解决问题<br />
1、无法传递参数问题。<br />
&nbsp;&nbsp; 你细看@1和@2处,当前的代码实现是无法把"pre"和"next"参数传递过去，于是，当你运行例子，点击上一页或下一页，都是没信息alert出来的！<br />
&nbsp;&nbsp; 这种情况，是很常见的。那么，如何实现将参数传过去。<br />
&nbsp;&nbsp; 将@1处代码修改如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; 这样创建一个匿名函数赋予_a.onclick,也就是当_a对象的onclick事件触发后将执行此匿名函数，而匿名函数将帮忙调用testUse("pre")和this.changePage("pre")两个方法，<br />
&nbsp;&nbsp; 从而达成传递参数。<br />
&nbsp;&nbsp; 修改代码，运行例子后点击上一页后会显示如下两个信息，一个是testUse中输出的信息，证明了实现参数传递，另一个却是运行错误提示。<br />
&nbsp;&nbsp;&nbsp;<img height="390" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/2008_05/bind.jpg" width="514" border="0" /><br />
<br />
&nbsp;&nbsp; 这是执行this.changePage("pre")方法抛出来的。它并没像我们预期想的运行。<br />
&nbsp;&nbsp; 从提示获到的信息是，对象不支持此属性或方法（如果浏览器报的是中文提示就可以看到&#8220;对象不支持此方法或属性&#8221;的提示）<br />
&nbsp;&nbsp; 回头看this.changePage("pre")方法，很明显this是错误提示中所指的对象，在本应用中指PagesSystem对象指针的引用，在应用中确实是声明了this.changePage("pre")方法，但为什么说没此方法呢？？？？<br />
2、在问题1中，我们已成功解决传递参数，但PagesSystem对象的changePage方法被谁偷了？？？<br />
&nbsp;&nbsp; 再将刚才的代码修改如:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; 再运行例子，你会发现输出this.tagName的值为 A, 它就是_a对象。噢，我的天啊。怎么会这样？？？<br />
&nbsp;&nbsp; 哈哈..._a对象就是&lt;a href=""/&gt;&lt;/a&gt;这个html 元素对象，这里是&#8220;上一页&#8221;铵钮对象，原型中哪来changePage方法啊，所以报错！！！<br />
&nbsp;&nbsp; 你可以这样理解，看如下代码:<br />
&nbsp;&nbsp;&nbsp;&nbsp; function PagesSystem(container){//此应用中的PagesSystem对象，changePage方法的上下文对象,也可以称为归属者。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...省略其它代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage = function(evtObj) { //根据点击后传过来的参数决定是加1或是减1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(evtObj == "next") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage += 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页加1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else if(evtObj == "pre"){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //此处不作if(this.currentPage ==1) return;限制为了体现当传入的参数为"pre"时，下面的alert()一定会执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage -= 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("你已执行将当前页减1，现在当前页是：" + this.currentPage);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...省略其它代码<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 这样的代码，你很容易看出this是指PagesSystem, 那么我们继续往下看<br />
&nbsp;&nbsp;&nbsp;&nbsp; 假设 A对象的原型如下:<br />
&nbsp;&nbsp;&nbsp;&nbsp; function A() {//@4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.doClick = function() { //点击<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick();//执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 当你在PagesSystem方法中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; 写上这样的代码后,你可以离谱认为@4的代码的模样是如下：<br />
&nbsp;&nbsp;&nbsp; function A() {//@4<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick = function(){ //@1 当点击此（"上一页"）铵钮时执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; testUse("pre"); //参看@3<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert(this.tagName); //@5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.changePage("pre"); //@6<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.doClick = function() { //点击<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.onclick();//执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //...<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; 呵呵。。如果这样看的话，@5,@6中的this当然是指a对象，没异义。那当然是没changePage方法。<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
3、那么如何解决这问题呢？？<br />
&nbsp;&nbsp; 很幸运，prototype.js中的bind方法就可以解决这样的问题，它还解决我们上面提的传参数问题。<br />
&nbsp;&nbsp; 看bind大侠帅样:<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; bind: function() {<br />
&nbsp;&nbsp;&nbsp; if (arguments.length &lt; 2 &amp;&amp; Object.isUndefined(arguments[0])) return this;<br />
&nbsp;&nbsp;&nbsp; var __method = this, args = $A(arguments), object = args.shift();<br />
&nbsp;&nbsp;&nbsp; return function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return __method.apply(object, args.concat($A(arguments)));<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; }<br />
&nbsp; bind方法中的this就是bind方法的所属者（上下文）如: f.bind(),f是一个声明了的方法,那么bind 方法里的this就是f<br />
&nbsp; 再细看，bind方法其实做的工作是返回一个匿名函数,此匿名函数帮忙执行this所指的方法（bind方法的所属者），如果你有如下代码<br />
&nbsp; function f(msg) {<br />
&nbsp;&nbsp;&nbsp; this.functionName = "f method";<br />
&nbsp;&nbsp;&nbsp; alert(msg);<br />
&nbsp;&nbsp;&nbsp; alert(this.functionName);<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; button.onclick = f.bind(this, msg); //这里的this指f, 在bind方法中用object = args.shift()获得，这样的话，当点击button后执行f方法, f方法中的this就不会无故被 button代替。^_^不然，会报错的啊，button哪来functionName，呵呵...<br />
&nbsp; 它既解决将msg参数传过去，同时将f绑定到button环境下，bind方法得名可能就是这意义吧。至于如何实现将f绑定，靠的就是apply方法。<br />
&nbsp; apply谜人色彩就由你们自行去揭开啦！<br />
&nbsp; 介绍了bind大侠给大家，我的例子就麻烦你们自己调通它啦。谢了。。<br />
&nbsp;&nbsp;<br />
&nbsp; 欢迎交流指正。<br />
<br />
&nbsp;<span style="color: red">备注：&nbsp;如需转载本文，请注明出处</span><br />
&nbsp;&nbsp;&nbsp;&nbsp; </p>
<img src ="http://www.blogjava.net/sonnylys/aggbug/199080.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-05-08 22:37 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/08/199080.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用javascript实现较为通用的客户端分页组件</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/04/198279.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Sun, 04 May 2008 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/04/198279.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/198279.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/04/198279.html#Feedback</comments><slash:comments>23</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/198279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/198279.html</trackback:ping><description><![CDATA[1、测试页面<br />
&lt;html&gt;<br />
&lt;head&gt;<br />
&nbsp;&lt;script src="pageSystem.js"&gt;&lt;/script&gt;<br />
&nbsp;&lt;script&gt;<br />
&nbsp;&nbsp; var psys;<br />
&nbsp;&nbsp; window.onload = function() {<br />
&nbsp;&nbsp;&nbsp; psys = new PageSystem(1120, "pageDiv", 10, showMsg); //总记录数, 分页系统容器，每组10页,回调<br />
&nbsp;&nbsp;&nbsp; psys.init();<br />
&nbsp; }<br />
&nbsp; <br />
&nbsp; function showMsg(currentPage, pageSize) {<br />
&nbsp;&nbsp;&nbsp; //回调方法自定义，两个参数，第一个为当前页，第二个为每页记录数<br />
&nbsp;&nbsp;&nbsp; /****************将currentPage和pageSize请求数据更新列表,最好使用ajax技术******************/<br />
&nbsp;&nbsp;&nbsp; alert("请求数据要的相应参数&gt;&gt; currentPage: "+ currentPage + " pageSize: " + pageSize);<br />
&nbsp; }<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; /*****如果要更新分页系统请如下操作******/<br />
&nbsp;&nbsp;&nbsp; //psys.update(count); //@count 为记录总数<br />
&nbsp;&nbsp;&nbsp; function updatePageSys() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; psys.update(150); //@count 为记录总数<br />
&nbsp;&nbsp; }<br />
&nbsp; &lt;/script&gt;<br />
&nbsp; &lt;style&gt;<br />
&nbsp;&nbsp;&nbsp; #pageDiv{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; font-size:13px;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp; &lt;/style&gt;<br />
&lt;/head&gt;<br />
&lt;body&gt;<br />
&nbsp; &lt;div id="pageDiv"&gt;<br />
&nbsp; &lt;/div&gt;<br />
&nbsp; &lt;br/&gt;&lt;br/&gt;<br />
&nbsp; &lt;a href="#" onclick="updatePageSys();"/&gt;更新分页系统&lt;/a&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
2、pageSystem.js<br />
function PageSystem(count, divID, grountCount, callBack) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.totolCount = count; //总记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.initMaxPage = grountCount? grountCount: 5;&nbsp; //显示页数，如 1 2 3 4 5<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pageSize = 10;&nbsp; //每页记录数<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentMax = 0; //当前显示的最大页码, 如 1 2 3 4 5; 5为最大页码<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentMin = 0; //当前显示的最小页码, 如 11 12 13 14 15; 11为最小页码<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.homePage = 0; //首页<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.endPage = 0; //未页<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 0; //当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.currentActiveSpan; //当前活动a容器<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj = document.getElementById(divID); //分页系统容器<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pages = 0; //总页数，计算得到<br />
&nbsp;&nbsp;&nbsp;&nbsp; //this._url = _url; //提交URL<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.callBack = callBack; //回调<br />
&nbsp;&nbsp;&nbsp;&nbsp; var that = this; //指针的引用<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.init = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pages = parseInt(this.totolCount / this.pageSize); //获得总共有几页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pages = this.totolCount % this.pageSize == 0? this.pages: this.pages+1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createHomePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var n = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(n &lt;= this.pages) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n &gt; this.initMaxPage){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; //到达最大显示数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:10px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n == 1) { //初始化时第一页为活动页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.innerText = n;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentActiveSpan = _span;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.reView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = n;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(this.pages != 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentMax = n - 1; //当前组最大页码 1 2 3 4 5值为5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentMin = 1; //当前最小页码 1 2 3 4 5 值为1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.homePage = 1; //首页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.endPage = this.pages; //未页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = 1; //当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(this.currentMax);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert(this.currentMin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createEndPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; this.query = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var curPage = that.currentPage; //当前页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pageSize = that.pageSize;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.callBack) that.callBack(curPage, pageSize);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; this.reView = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; //重新渲染UI<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.reViewActivePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.query();<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; this.reViewActivePage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重新渲染当前页视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var actA = event.srcElement; //当前被点击的 a对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var ap = actA.parentNode; //获得当前a容器span对象<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //还原当前页视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.reView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = that.currentActiveSpan.innerText;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.innerText = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //渲染新的当前页视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan = ap; //切换当前活动页容器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var curPage = parseInt(actA.innerText);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.removeChild(actA);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.innerText = curPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.currentPage = curPage; //更改当前页码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!that.toNextGroup()) that.toPreGroup();<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; this.toNextGroup = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重新渲染显示页下一组 1 2 3 4 5 --&gt; 5 6 7 8 9<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.currentPage == that.currentMax) {//点击的页码为当前组最大页码，当go 下一组<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.currentPage != that.endPage) { //如果点了未页当然不会再有下一组啦！<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.innerHTML = ""; //@1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pageCode = parseInt(that.currentPage) + 1; //显示页码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var n = 2; //当前活动页不重创<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createHomePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.innerText = that.currentPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.appendChild(that.currentActiveSpan); //将当前活动页回放,请看@1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(pageCode &lt;= that.pages) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n &gt; that.initMaxPage){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; //到达最大显示数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:10px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = that.reView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = pageCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageCode++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMax = pageCode - 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMin = that.currentPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert("currentMax: " + that.currentMax);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert("currentMin: " + that.currentMin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createEndPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; this.toPreGroup = function() { //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重新渲染显示页上一组 5 6 7 8 9 --&gt;1 2 3 4 5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.currentPage == that.currentMin) { //点了组中最小页码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.currentPage != 1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.innerHTML = ""; //@2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pageCode = parseInt(that.currentPage) - (that.initMaxPage -1); //显示页码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var n = 2; //当前活动页不重创<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createHomePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(true) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n &gt; that.initMaxPage){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break; //到达最大显示数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:10px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = that.reView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = pageCode++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMax = that.currentPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMin = pageCode - (that.initMaxPage -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert("currentMax: " + that.currentMax);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert("currentMin" + that.currentMin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentActiveSpan.innerText = that.currentPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.appendChild(that.currentActiveSpan); //将当前活动页回放,请看@2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createEndPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.toHomePage = function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //去到首页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.pages == 0) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.currentPage != 1) {//切组<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.innerHTML = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.init();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentPage = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMin = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMax = that.initMaxPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.query();<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.toEndPage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //去到未页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(that.pages == 0 ||that.currentPage == that.pages) return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(true) {//切组条件修改，此条件作废,临时设为true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.innerHTML = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createHomePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createPrePage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var pageCode = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp; var n = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(pageCode &lt;= that.pages) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(n &gt; that.initMaxPage-1){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; n++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageCode++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageCode = that.pages - (n-2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var j = 1; j &lt; n; j++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:10px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(pageCode == that.pages) { //初始化时第一页为活动页<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;_span.innerText = pageCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;that.currentActiveSpan = _span;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = that.reView;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = pageCode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pageCode++;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createNextPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.createEndPage();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }//end if<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentPage = that.pages;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMin = that.pages - (n-2);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.currentMax = that.pages;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert("currentMin: " + that.currentMin);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //alert("currentMax: " + that.currentMax);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert("pages: " + that.pages);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.query();<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.next = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //下一页<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.pre = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //上一页<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.update = function(count) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //更新分页系统<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.totolCount = count;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; that.pageDivObj.innerHTML = "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.init();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }; <br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createPrePage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.pre;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "上一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createNextPage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.next;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "下一页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createHomePage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var homeSpan = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.toHomePage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "首页";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; homeSpan.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj.appendChild(homeSpan);<br />
&nbsp;&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp;&nbsp; this.createEndPage = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _span = document.createElement("SPAN");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.style.cssText = "margin-left:16px";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _a = document.createElement("A");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.href = "#";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.onclick = this.toEndPage;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _a.innerText = "未页(" + this.pages +")";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _span.appendChild(_a);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.pageDivObj.appendChild(_span);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; }<br />
<br />
3、效果图<br />
<img height="97" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/pagesys.JPG" width="302" border="0" />&nbsp;<br />
<span style="color: red">如需转载，请注明原文出处！谢谢合作。</span>
<img src ="http://www.blogjava.net/sonnylys/aggbug/198279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-05-04 22:54 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/04/198279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用"window.showModalDialog()"实现DIV模式弹出窗口</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/01/197683.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Thu, 01 May 2008 13:33:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/01/197683.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/197683.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/01/197683.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/197683.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/197683.html</trackback:ping><description><![CDATA[<br />
<strong style="color: red">1、test.html&nbsp; 测试页</strong><br />
&nbsp;&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;测试页面&lt;/title&gt;<br />
&nbsp;&nbsp; &lt;style&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; .list {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border-top:1 solid #8A2BE2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border-left:1 solid #8A2BE2;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border-right:1 solid #8A2BE2;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; .list td {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; border-bottom: 1 solid #8A2BE2;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/style&gt;<br />
&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function $(el) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return document.getElementById(el);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function showWin(param) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.showModalDialog("dailog.htm", param, "dialogWidth:" +param.width +"px;dialogHeight:"+param.height+"px;center:yes;help:no;scroll:no;status:no;resizable:no");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function TB(tbid) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.tb = typeof(tbid) == "string"? $(tbid): tbid;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.getValue = function(rowIndex, cellIndex){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trs = this.tb.rows[rowIndex];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _td = trs.cells[cellIndex];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return _td.innerText;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setValue = function(rowIndex, cellIndex, value) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _tr = this.tb.rows[rowIndex];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _td = _tr.cells[cellIndex];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _td.innerText = value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /********获取行索引********/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.findRowIndex = function(eventSrc) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _tr = eventSrc; //eventSrc事件源,必须在TD里获事件源是TD或TR本身<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while(_tr.tagName != "TR") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _tr =&nbsp; _tr.parentNode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var trs = this.tb.rows;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i = 0; i &lt; trs.length; i++){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(_tr == trs[i]) return i;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function edit() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tb = new TB("data");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rIndex = tb.findRowIndex(event.srcElement);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("updateRowIndex").value = rIndex;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("userName").value = tb.getValue(rIndex, 1); //获得姓名<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("sex").value = tb.getValue(rIndex, 2); //获得性别<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("age").value = tb.getValue(rIndex, 3); //获得年龄<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showWin({title:"修改用户信息", width:390, height:230, _div:"openWin",parent:window});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function saveAndUpdateView(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var updateRowIndex = $("updateRowIndex").value;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var tb = new TB($f("data")); //$f()在dailog.html定义,获到的table是父窗口中的table<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb.setValue(updateRowIndex, 1, $("userName").value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb.setValue(updateRowIndex, 2, $("sex").value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tb.setValue(updateRowIndex, 3, $("age").value);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp; <br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp; &lt;p style="margin-top:60px"&gt;<br />
&nbsp;&nbsp; &lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;table id="data" class="list" width="460px"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;编号&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;用户名&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;性别&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;年龄&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;操作&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;1&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;李永胜&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;男&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;27&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;span style="background:#FAEBD7;cursor:hand" onclick="edit();"&gt;&amp;nbsp;修改&amp;nbsp;&lt;/span&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;2&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;林兄&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;男&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;27&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;span style="background:#FAEBD7;cursor:hand" onclick="edit();"&gt;&amp;nbsp;修改&amp;nbsp;&lt;/span&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;3&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;叶兄&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;男&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;23&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;&lt;span style="background:#FAEBD7;cursor:hand" onclick="edit();"&gt;&amp;nbsp;修改&amp;nbsp;&lt;/span&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br />
&nbsp;&nbsp; &lt;/center&gt;<br />
&nbsp; &lt;/p&gt;<br />
&nbsp; <br />
&nbsp; &lt;!---弹出窗口显示的内容----&gt;<br />
&nbsp; &lt;div id="openWin" style="display:none;"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;form&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldSet&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;修改用户&lt;/legend&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;用户名&lt;/td&gt;&lt;td&gt;&lt;input type="text" id="userName"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;性别&lt;/td&gt;&lt;td&gt;&lt;input type="text" id="sex"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;td&gt;年龄&lt;/td&gt;&lt;td&gt;&lt;input type="text" id="age"/&gt;&lt;/td&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldSet&gt; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input type="hidden" id="updateRowIndex"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;span style="background:#FAEBD7;cursor:hand" onclick="saveAndUpdateView();"&gt;&amp;nbsp;修改&amp;nbsp;&lt;/span&gt;<br />
&nbsp; &lt;/div&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
<span style="color: red"><strong>2、dailog.html 窗口原型</strong></span><br />
<br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; var param = window.dialogArguments; //传过来的模式对话框窗口参数<br />
&nbsp;&nbsp;&nbsp;&nbsp; document.title = param.title; //窗口标题,必须在窗口创建前实现s<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; /********将父窗口的js加载进来********/<br />
&nbsp;&nbsp;&nbsp;&nbsp; var scripts = param.parent.document.scripts;<br />
&nbsp;&nbsp;&nbsp;&nbsp; var _head = document.getElementsByTagName("head")[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp; for(var n = 0; n &lt; scripts.length; n++) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(scripts[n].src) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _script = newEl("script");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _script.src = scripts[n].src;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bind(_head, _script);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{//加载直接在html文档中写的script<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var _script = newEl("script");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; _script.text = scripts[n].text;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bind(_head, _script);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; /*******根据ID获得父窗口的元素*********/<br />
&nbsp;&nbsp;&nbsp;&nbsp; function $f(el) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return param.parent.document.getElementById(el);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /***********创建一个HTML元素*******/<br />
&nbsp;&nbsp;&nbsp;&nbsp; function newEl(tagName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return document.createElement(tagName);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; /***********追加元素***************/<br />
&nbsp;&nbsp;&nbsp;&nbsp; function bind(ower, child) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ower.appendChild(child);<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; /*******在浏览器完成对象的装载后立即触发*********/<br />
&nbsp;&nbsp;&nbsp;&nbsp; window.onload = function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var winDiv;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(typeof(param._div) == "string") {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; winDiv = param.parent.document.getElementById(param._div); //父窗口window对象,因为param._div对象在父窗口<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{//直接传对象过来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; winDiv = param._div;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("mainDiv").innerHTML = winDiv.innerHTML; //将DIV内容在弹出窗口中渲染<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp;&lt;center&gt;<br />
&nbsp; &lt;div id="mainDiv" style="margin-top:20px;width:90%"&gt;&lt;/div&gt;<br />
&nbsp;&lt;/center&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
<span style="color: red">如需转载，请注明原文出处！谢谢合作。</span><br />
<img src ="http://www.blogjava.net/sonnylys/aggbug/197683.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-05-01 21:33 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/01/197683.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用模式对话框实现“消息提示框”和“操作提示框”</title><link>http://www.blogjava.net/sonnylys/archive/2008/05/01/197655.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Thu, 01 May 2008 07:54:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/05/01/197655.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/197655.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/05/01/197655.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/197655.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/197655.html</trackback:ping><description><![CDATA[<br />
&nbsp; 由于本人认为用 alert()和confirm()的消息框和操作确认对话框，界面不太友好，下面介绍用模式对话框实现&#8220;消息提示&nbsp; 框&#8221;和&#8220;操作提示框&#8221;；用模式对话框也可以实现弹出窗口(抱括Iframe模式及DIV模式），DIV模式较麻烦些，不过，还挺实用，这里不作介绍。
<p><span style="color: red"><strong>1、test.html 测试页</strong></span><br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;测试页面&lt;/title&gt;<br />
&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; /**** 打开消息框 ***<br />
&nbsp;&nbsp;&nbsp;* @param 为Object类型,原型为 {msg:"val1", time:val2},val1为要提示的消息，val2为窗口出来后延迟关闭的时间 <br />
&nbsp;&nbsp;&nbsp;*<br />
&nbsp;&nbsp;&nbsp;*/<br />
&nbsp;&nbsp;&nbsp;function showMsg(param) {<br />
&nbsp;&nbsp;&nbsp;&nbsp; window.showModalDialog("msg.html", param, "dialogWidth:280px;dialogHeight:180px;center:yes;help:no;scroll:no;status:no;resizable:no");<br />
&nbsp;&nbsp;&nbsp;}</p>
<p>&nbsp;&nbsp;/****操作确认窗口*****<br />
&nbsp;&nbsp; * @param 为string类型,提示信息<br />
&nbsp;&nbsp; * @return true为选取了&#8220;确定&#8221;铵钮，false为选取了&#8220;取消&#8221;铵钮<br />
&nbsp;&nbsp; */<br />
&nbsp; &nbsp;function confirm(msg) {<br />
&nbsp;&nbsp;&nbsp; return window.showModalDialog("confirm.html", msg, "dialogWidth:280px;dialogHeight:180px;center:yes;help:no;scroll:no;status:no;resizable:no");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; function confirmDel() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var rval = confirm("确定删除此用户吗？");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(rval) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showMsg({msg:"你点击了确定铵钮", time:1200});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; showMsg({msg:"你点击了取消铵钮", time:1200});<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp; &lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" onclick="showMsg({msg:'1秒钟后会自动关闭的提示信息框', time:1000})"&gt;会自动关闭的提示信息框&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" onclick="confirmDel();"&gt;操作确认对话框&lt;/a&gt;<br />
&nbsp;&nbsp; &lt;/center&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
</p>
<span style="color: red"><strong>2、msg.html 消息框通用模板</strong></span><br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;提示对话框&lt;/title&gt;<br />
&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var obj = window.dialogArguments; //传过来的模式对话框窗口参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /****在obj.time秒后关闭窗****/<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.setTimeout(function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;window.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }, obj.time);<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp; &lt;p style="margin-top:36px"&gt;<br />
&nbsp;&nbsp; &lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.write(obj.msg);&nbsp; //打印信息<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp; &lt;/center&gt;<br />
&nbsp; &lt;/p&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
<span style="color: red"><strong>3、confirm.html</strong></span><br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;操作确认对话框&lt;/title&gt;<br />
&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; function setState() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; returnValue = event.srcElement.id == "ok"? true: false;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; window.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&nbsp; &lt;p style="margin-top:26px"&gt;<br />
&nbsp;&nbsp; &lt;center&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var msg = window.dialogArguments? window.dialogArguments: "";<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; document.write(msg);<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;br/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;div style="margin-top:20px"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" id="ok" onclick="setState()"&gt;确定&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href="#" id="cal" onclick="setState()"&gt;取消&lt;/a&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />
&nbsp;&nbsp; &lt;/center&gt;<br />
&nbsp; &lt;/p&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
<br />
运行test.html例子可以看到相应的效果<br />
<img height="332" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/confirm.jpg" width="418" border="0" /><br />
<br />
<br />
<img height="367" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/msg.jpg" width="338" border="0" /> 
 <img src ="http://www.blogjava.net/sonnylys/aggbug/197655.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-05-01 15:54 <a href="http://www.blogjava.net/sonnylys/archive/2008/05/01/197655.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>简单的javascript入门知识</title><link>http://www.blogjava.net/sonnylys/archive/2008/04/27/196669.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Sun, 27 Apr 2008 14:53:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/04/27/196669.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/196669.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/04/27/196669.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/196669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/196669.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; JavaScript是一种可嵌入到HTML文档中基于对象（Object Based）和事件驱动（Event Driver）的脚本编程语言，它的运行依赖于浏览器并且运行于客户端。<br />
&nbsp;&nbsp;&nbsp; 一个 JavaScript 程序其实是一个文档，一个文本文件，它嵌入到 HTML 文档中执行。所以，一般的本文编辑器就可以实现编写javascript代码。<br />
&nbsp;&nbsp;&nbsp;1、将javascript嵌入到HTML文档中，一般有两种实现方法。一种是直接在HTML文档中的任何地方加入&lt;script&gt;<br />
&nbsp; &lt;!--你的js代码--&gt;<br />
&lt;/script&gt;<br />
值得注意的是，js代码必须在&lt;frameset&gt;之前插入才有效。<br />
另一种是将js代码写在一个以 .js为后缀的js文件里，用以下方法引入到HMTL档供使用<br />
&nbsp;&lt;script src="你要引入的.js文件的路径" type="text/javascript"&gt;&lt;/script&gt;<br />
这两种实现的例子如下：<br />
&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;js exmaple&lt;/title&gt;<br />
&nbsp;&lt;!--直接在HMTL文档中写js代码--&gt;&nbsp;<br />
&nbsp; &lt;script&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function&nbsp; sayHello() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("hello");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp;&lt;!--从.js文件中加载--&gt;<br />
&nbsp;&nbsp;&lt;script src="myjs/util.js"&gt;&lt;/script&gt;<br />
&nbsp;&nbsp;&lt;/head&gt;<br />
&nbsp;&lt;body&gt;<br />
&lt;/body&gt;<br />
&lt;/html&gt;<br />
2、变量声明<br />
&nbsp; javascript中用 var关键字声明一个变量，如：var userName;由于javascript使用的是弱类型，所以声明时不需要指定具体类型，在运行时会根据所赋的值检查其数据类型。比如声明 var v;&nbsp;在运行中如果出现v = 123;那么变量v指数值类型，如果运行中出现的是v = "123"，v 为字符串类型。<br />
3、函数声明，介绍两种型式<br />
&nbsp; 一、function sayHello(who) { //who为参数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("say hello to: " + who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;二、var sayHello = function(who) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert("say hello to: " + who);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;说明：第二种声明方式是将函数的指针赋给一个变量，调用如下：sayHello("whoOne");和第一种声明方式调用一样。举个第二种声明方式有用的应用，如，在js代码中，给一个铵钮的onclick事件注册一个方法可以如下声明：&nbsp;&nbsp;&nbsp; var btn = document.createElement("button");&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; btn.onclick= function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加当点击此铵钮时想执行的js代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
4、事件响应<br />
&nbsp;&nbsp; 声明了的函数可以在js代码里被调用，也可以用于响应事件。如：<br />
&nbsp;&lt;html&gt;<br />
&nbsp;&lt;head&gt;<br />
&nbsp;&nbsp; &lt;title&gt;js exmaple&lt;/title&gt;<br />
&nbsp;&lt;!--直接在HMTL文档中写js代码--&gt;&nbsp;<br />
&nbsp; &lt;script&gt;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; function&nbsp; sayHello() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; alert("hello");<br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp; &lt;/script&gt;<br />
&nbsp; &lt;/head&gt;<br />
&nbsp;&nbsp;&lt;body&gt;<br />
&nbsp;&nbsp; &lt;!--响应button中的onclick事件（单击事件）,调用sayHello()方法--&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;button onclick="sayHello()"&gt;点击将调用sayHello()方法来响应&lt;/button&gt;<br />
&nbsp;&lt;/body&gt;<br />
&lt;/html&gt;<br />
运行例子，点击铵钮后运行结果如下：<br />
&nbsp;<img height="300" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/jsimage.jpg" width="400" border="0" /><br />
<br />
<br />
备注：这是一篇很简单的javascript相关知识文章，适合对javascript完全没概念的初学者参考， 有误之处，请指正讨论。<br />
<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;<br />
<br />
&nbsp;&nbsp; 
  <img src ="http://www.blogjava.net/sonnylys/aggbug/196669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-04-27 22:53 <a href="http://www.blogjava.net/sonnylys/archive/2008/04/27/196669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Spring与Struts集成开发</title><link>http://www.blogjava.net/sonnylys/archive/2008/03/01/183112.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Sat, 01 Mar 2008 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/03/01/183112.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/183112.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/03/01/183112.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/183112.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/183112.html</trackback:ping><description><![CDATA[<p><br />
Spring与Struts集成开发<br />
<br />
最近喜欢将所学的东西理顺一下，且发现写blog可以达成这目的。<br />
那就来整理一下我对Spring与Struts集成开发的一些想法。<br />
<br />
首先确认系统的结构为三层的B/S模式结构，如下图：<br />
<img style="width: 514px; height: 339px" height="339" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/three.jpg" width="514" border="0" /><br />
在图中看出，Spring和Struts集成开发中，Spring在业务逻辑层被使用（集成）。因为Spring框架的依赖注入，AOP及可声明的事务管理方面的技术优势，使得用Spring来管理业务实体，实体之间的依赖关系，业务逻辑服务接口变得简单且可配置。至此我们要清楚：<span style="color: red">Spring和Struts集成开发中，Spring在业务逻辑层被使用（集成）。</span><br />
<br />
清楚Struts和Spring在系统结构中分别充当的角色后，接下来要讨论：<span style="color: #000000"><span style="color: #ff0000">如何实现集成</span>？<br />
<strong style="color: #0000ff">1、使用Spring的ActionSurpert类集成Struts。</strong><br />
org.springframework.web.struts.ActionSurpert是一个继承org.apache.struts.action.Action的类，简要代码如下：<br />
public abstract class ActionSurpert extends Action {<br />
&nbsp;&nbsp;&nbsp;&nbsp; private WebApplicationContext webApplicationContext;<br />
&nbsp;&nbsp;&nbsp;&nbsp; public void setServlet(ActionServlet actionServlet) {//<span style="color: red">当容器实例化此Action时被容器调用<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;surper.setServlet(actionServlet);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(actionServlet != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.webApplicationContext = initWebApplicationContext(actionServlet);//<span style="color: red">获取webApplicationContext<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //........<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }else{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //.......<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; //通过getXXX()方法获取&nbsp;&nbsp; webApplicationContext 对象<br />
&nbsp;&nbsp;&nbsp;&nbsp; protected final WebApplictionContext getWebApplicationContext() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.webApplicationContext;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
通过上述代码可以看出，所有继承了ActionSupport类的Action将可以通过WebApplicationContext对象的getBean(beanKey)方法获得Spring配置文件中定义的各种Bean。<br />
WebApplicationContext要由Web Server来加载，有两种方法：<br />
１、通过org.springframework.web.struts.ContextLoaderPlugIn加载，ContextLoaderPlugIn是个插件，需要在Struts配置文件中配置。<br />
&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />
&nbsp;&nbsp; &lt;set-property property = "contextConfigLocation" value="/WEB-INF/applicationContext.xml"&gt;&lt;/set-property&gt;<br />
&lt;/plug-in&gt;<br />
2、在web.xml文件中加载<br />
&lt;context-param&gt;<br />
&nbsp; &lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;<br />
&nbsp;&lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />
&lt;/context-param&gt;<br />
&lt;servlet&gt;<br />
&nbsp;&lt;servlet-name&gt;context&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;org.springframework.web.context.ContextLoaderServlet&lt;/servlet-name&gt;<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;<br />
举个简单的例子说明一下相关配置信息：<br />
假定有ExampleAction，ExampleBean，ExampleService这几个类，它们工作流程是：<br />
用户请求ExampleAction，ExampleAction调用ExampleService的接口方法对ExampleBean进行相关的操作。<br />
1、applicationContext.xml中配置相关的bean信息<br />
&lt;beans&gt;<br />
&lt;bean id="<span style="color: red">dataSource</span>" class="org.springframework.jdbc.datasource.DriverManagerDataSource"&gt;<br />
&nbsp;&nbsp;&lt;property name="driverClassName"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="url"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;jdbc:mysql://localhost:3306/ssh?useUnicode=true&amp;amp;characterEncoding=UTF-8&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="username"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&nbsp;&lt;property name="password"&gt;<br />
&nbsp;&nbsp;&nbsp;&lt;value&gt;root&lt;/value&gt;<br />
&nbsp;&nbsp;&lt;/property&gt;<br />
&nbsp;&lt;/bean&gt;<br />
&lt;bean id="<span style="color: red">exampleBean</span>" class="org.mypackge.beans.ExampleBean"/&gt;<br />
&lt;bean id="<span style="color: red">exampleBeanService</span>" class="org.mypackge.services.ExampleService"/&gt;@<br />
&lt;/beans&gt;<br />
通过这样配置后，在ExampleAction中可以用getWebApplicationContext() 获得webApplicationContext对象，然后通过<br />
webApplicationContext的getBean(<span style="color: red">beanKey</span>)方法获得相应的bean进行业务处理。标了红色的"beanKey"就是applicationContext.xml中&lt;bean&gt;元素定义的bean id，如:webApplicationContext.getBean("<span style="color: red">exampleBeanService</span>")。@<br />
<br />
当然，ExampleAction还要在stuts-config.xml配置文件中配置，这里不作介绍。<br />
<strong style="color: #0000ff">2、使用Spring的Action代理集成Struts</strong><br />
这种集成方式的核心思想是，将Struts的配置文件中的所有Action的type属性设为org.springframwork.web.struts.DelegationActionProxy。当用户请求Action时，就执行这代理，代理会在Spring应用上下文中找到真正的Action，然后交给它处理用户的请求。而真正用于处理用户请求的Action的配置放在了Spring的配置文件中。这样，Struts中的Action以及其依赖关系就可以用Spring容器来管理，比如将业务逻辑对象注入到Action中，供其使用。简单片段&lt;bean<span style="color: #ff99cc">&nbsp;name="/exampleAction" </span>class="org.myproj.struts.actions.ExampleAction"&gt;<br />
....<br />
&lt;/bean&gt;<br />
说明：用name属性而不是用id来标识这个Bean,Spring不允许ID中出现"/"，而name可以；"name"属性值要和struts-config.xml文件中相应&lt;action&gt;元素中的path属性值相同<span style="color: #ff99cc">(&lt;action path="/exampleAction"</span>)，这样Action代理才能找到相应的Action来处理请求。<br />
<br />
欢迎讨论，提出宝贵意见。<br />
<br />
<br />
</p>
</span>
 <img src ="http://www.blogjava.net/sonnylys/aggbug/183112.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-03-01 11:08 <a href="http://www.blogjava.net/sonnylys/archive/2008/03/01/183112.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts与hibernate集成开发</title><link>http://www.blogjava.net/sonnylys/archive/2008/02/29/183017.html</link><dc:creator>Sonny Li</dc:creator><author>Sonny Li</author><pubDate>Fri, 29 Feb 2008 10:44:00 GMT</pubDate><guid>http://www.blogjava.net/sonnylys/archive/2008/02/29/183017.html</guid><wfw:comment>http://www.blogjava.net/sonnylys/comments/183017.html</wfw:comment><comments>http://www.blogjava.net/sonnylys/archive/2008/02/29/183017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sonnylys/comments/commentRss/183017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sonnylys/services/trackbacks/183017.html</trackback:ping><description><![CDATA[struts与hibernate集成开发<br />
最近学习struts与hibernate相关知识，下面是个人对struts与hibernate集成开发的一些见解，写出来跟大家共同讨论、学习，欢迎指教。<br />
&nbsp;要集成struts与hibernate进行开发，首先应该了解一下struts和hibernate框架各自的工作原理和模式般的开发流程。<br />
首先介绍struts的大概工作流程，下面通过一张struts工作的时序图来说明其工作流程：<br />
<img height="527" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/active.jpg" width="555" border="0" /><br />
Struts工作流程分析：<br />
1）Web服务器启动，初始化ActionServlet,读取struts-config.xml文件配置信息，把这些信息分发到相应的对象中。<br />
2）用户发出请求后，ActionServlet接收到请求，查找与请求匹配的Action映射对象（ActionMapping)对象是否存在，是：将请求以及Actionform对象传递给相应的Action对象。<br />
<span style="color: red"><strong>3）Action调用业务逻辑服务接口，结合ActionForm，对用户的请求做出处理。</strong><br />
</span>4）Action处理完毕返回ActionForward对象给ActionServlet。ActionForward对象包含了转发目标对象，可以是jsp或Action。<br />
5)ActionServlet根据ActionForward对象的指向继续转发请求，重复从第2步进行处理。<br />
至此，我们对struts 的基本工作流程有个整体的认识，但还没提hibernate相关的任何知识，业务逻辑层也只是在第3)点微提一下。<br />
<br />
接下来，我们来看下hibernate是怎样工作的？(注：在这不是讨论ＯＲＭ的实现，只讨论怎让hibernate这ORM中间件工作）<br />
Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server，就是说不需要这些支持。<br />
Hibernate有五个核心接口，分别为Configuratoin, SessionFactory, Session,Query及Criteria。通过这些接口就可以完成hibernate的初始化，对持久化对象进行存取，更新等操作。<br />
下面简要介始一下这些接口。<br />
1、Configuration接口 是Hibernate应用的入口，在开始使用Hibernate的各种功能之前需要先创建Configuration对象。它负责加载Hibernate 应用配置文件，如Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");<br />
2、SessionFactory接口 缓存了Configuration对象所包含的配置信息，能根据映射信息自动生成SQL语句，并提供生成Session对象的方法。<br />
3、Session接口提供一系列持久化的操作。<br />
到此，可以写一小段代码来加看下如何使用hibernate<br />
Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");//配置文件不在此作介绍<br />
SessionFactory sessionFactory = cf.buildSessionFactory();<br />
Session session = sessionFactory.openSession();<br />
session.update();<br />
session.save();等等持久化操作。<br />
至此，简单介绍了hibernate 是怎样工作的，其实我只想让你清楚：&#8220;<span style="color: red">Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server，就是说不需要这些支持。&#8221;<br />
</span><br />
那么，我们要回到主题来：如何集成struts与hibernate开发？答案很简单：hibernate和struts本质上是没什么联系的，只要你记住：<span style="color: red">Hibernate是个独立的框架，它不依赖任何的Web Server或Application Server。</span>用DAO模式把hibernate持久化的操作封装好，供业务逻辑服务类调用就可以。回过头来看struts工作流时序图的解释的第三点：&#8220;<span style="color: red"><strong>3）Action调用业务逻辑服务接口，结合ActionForm，对用户的请求做出处理。</strong></span>&#8221;，不难得出：<br />
用户请求后，struts负责找到相应的Action对象，Action调用业务逻辑服务接口，业务逻辑服务接口调用DAO接口(这里默认的实现就用hibernate,当然, 还可以有多种对数据库操作的实现）<br />
hibernate充当下面这张图中的"持久层（DAO）"<br />
<img height="468" alt="" src="http://www.blogjava.net/images/blogjava_net/sonnylys/bs.jpg" width="535" border="0" /><br />
<br />
由于本人对struts及hibernate认识不深，写这篇文章只是抛砖引玉，希望高手们发表意见指正错误，多指教。<br />
<br />
<br />
<br />
<br />
<br />
      <img src ="http://www.blogjava.net/sonnylys/aggbug/183017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sonnylys/" target="_blank">Sonny Li</a> 2008-02-29 18:44 <a href="http://www.blogjava.net/sonnylys/archive/2008/02/29/183017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>