??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色www永久网站,亚洲午夜福利在线视频,亚洲不卡在线观看http://m.tkk7.com/sonnylys/ 熟能生yQy夺天工!
zh-cnMon, 12 May 2025 19:30:06 GMTMon, 12 May 2025 19:30:06 GMT60- 请高手解救小弟,万分感激Q用dom4j如何实现按Element的某个属性排序?Q?http://m.tkk7.com/sonnylys/archive/2009/05/15/270844.htmlSonny LiSonny LiFri, 15 May 2009 06:47:00 GMThttp://m.tkk7.com/sonnylys/archive/2009/05/15/270844.htmlhttp://m.tkk7.com/sonnylys/comments/270844.htmlhttp://m.tkk7.com/sonnylys/archive/2009/05/15/270844.html#Feedback5http://m.tkk7.com/sonnylys/comments/commentRss/270844.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/270844.html请高手解救小弟,万分感激Q用dom4j如何实现按Element的某个属性排序?Q?如下面xml文g
<?xml version="1.0" encoding="GBK"?>
<books>
<book name="请高手解救下弟" price="30.00">
<book name="万分感激" price="40.00">
<book name="谢谢大家的回? price="50.00">
</books>
我想获取books节点下的所有book子节点,q按price属性排序,如何实现Q?br />
本h阅读dom4j的文,扑ֈorg.dom4j.xpath.DefaultXPath.selectNodes(Object context, XPath sortXPath)ҎW二个参?sortXPath"好像是用来排序的Q但不知如何写sortXPath参数?br />
先谢q,在线{?br />
说明Q本Z需要xsl排序Ҏ?br />

]]> - 自编 jtle(javascript template language engine) javascript模板语言引擎, L处理json数据!http://m.tkk7.com/sonnylys/archive/2008/05/25/202677.htmlSonny LiSonny LiSun, 25 May 2008 02:24:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/05/25/202677.htmlhttp://m.tkk7.com/sonnylys/comments/202677.htmlhttp://m.tkk7.com/sonnylys/archive/2008/05/25/202677.html#Feedback4http://m.tkk7.com/sonnylys/comments/commentRss/202677.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/202677.html 阅读全文

]]> - Prototype学习??bindҎ的“谜”迷彩!http://m.tkk7.com/sonnylys/archive/2008/05/08/199080.htmlSonny LiSonny LiThu, 08 May 2008 14:37:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/05/08/199080.htmlhttp://m.tkk7.com/sonnylys/comments/199080.htmlhttp://m.tkk7.com/sonnylys/archive/2008/05/08/199080.html#Feedback6http://m.tkk7.com/sonnylys/comments/commentRss/199080.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/199080.html Prototype的bindҎ常常把许多学习它的h弄得p糊涂涂Qgoogle和baidu一番后q是一塌胡涂!本h也如此;本h觉得它是个从“谜h”?#8220;qh”的方法。此文将发表个hҎҎ的理解,希望能帮助大家成功渡“?#8221;Q到?#8220;qh”的彼岸!
<html>
<head>
<script src="prototype.js"></script> //@7
<script type="text/javascript">
/**********************************
*
* 实现渲染一个带?上一??下一?的组?点击"上一?,当前减1,点击"下一?当前加1
*
*/
function PagesSystem(container){
this.currentPage = 10; //当前?br />
this.pageSysDiv = document.getElementById(container); //容器
this.init = function() { //组件画出来
this.createPrePage();
this.createNextPage();
};
this.changePage = function(evtObj) { //Ҏ点击后传q来的参数决定是?或是?
if(evtObj == "next") {
this.currentPage += 1;
alert("你已执行当前页?Q现在当前页是:" + this.currentPage);
}else if(evtObj == "pre"){
//此处不作if(this.currentPage ==1) return;限制Z体现当传入的参数?pre"Ӟ下面的alert()一定会执行
this.currentPage -= 1;
alert("你已执行当前页?Q现在当前页是:" + this.currentPage);
}
};
this.createPrePage = function() {//创徏上一늻?br />
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:16px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.changePage; //@1 当点LQ?上一?Q铵钮时执行
_a.innerText = "上一?;
_span.appendChild(_a);
this.pageSysDiv.appendChild(_span);
};
this.createNextPage = function() {//创徏下一늻?br />
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:16px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.changePage; //@2 当点LQ?下一?Q铵钮时执行
_a.innerText = "下一?;
_span.appendChild(_a);
this.pageSysDiv.appendChild(_span);
};
this.init(); //执行初始?br />
}
function testUse(msg){//@3在提出问题环节用?br />
alert(msg);
}
window.onload = function() {
var ps = new PagesSystem("pageDiv");
}
</script>
</head>
<body>
<div id="pageDiv"></div>
</body>
</html>
二、分析代码,提出问题Q解决问?br />
1、无法传递参数问题?br />
你细看@1和@2?当前的代码实现是无法?pre"?next"参数传递过去,于是Q当你运行例子,点击上一|下一,都是没信息alert出来的!
q种情况Q是很常见的。那么,如何实现参Cq去?br />
@1处代码修改如下:
_a.onclick = function(){ //@1 当点LQ?上一?Q铵钮时执行
testUse("pre"); //参看@3
this.changePage("pre");
}
q样创徏一个匿名函数赋予_a.onclick,也就是当_a对象的onclick事g触发后将执行此匿名函敎ͼ而匿名函数将帮忙调用testUse("pre")和this.changePage("pre")两个ҎQ?br />
从而达成传递参数?br />
修改代码Q运行例子后点击上一后会显C如下两个信息,一个是testUse中输出的信息Q证明了实现参数传递,另一个却是运行错误提C?br />

q是执行this.changePage("pre")Ҏ抛出来的。它q没像我们预期想的运行?br />
从提C到的信息是,对象不支持此属性或ҎQ如果浏览器报的是中文提C就可以看到“对象不支持此Ҏ或属?#8221;的提C)
回头看this.changePage("pre")ҎQ很明显this是错误提CZ所指的对象Q在本应用中指PagesSystem对象指针的引用,在应用中实是声明了this.changePage("pre")ҎQ但Z么说没此Ҏ呢?Q?Q?br />
2、在问题1中,我们已成功解决传递参敎ͼ但PagesSystem对象的changePageҎ被谁偷了Q?Q?br />
再将刚才的代码修改如:
_a.onclick = function(){ //@1 当点LQ?上一?Q铵钮时执行
testUse("pre"); //参看@3
alert(this.tagName);
this.changePage("pre");
}
再运行例子,你会发现输出this.tagName的gؓ A, 它就是_a对象。噢Q我的天啊。怎么会这PQ?
哈哈..._a对象是<a href=""/></a>q个html 元素对象Q这里是“上一?#8221;铵钮对象Q原型中哪来changePageҎ啊,所以报错!Q!
你可以这L解,看如下代?
function PagesSystem(container){//此应用中的PagesSystem对象QchangePageҎ的上下文对象,也可以称为归属者?br />
//...省略其它代码
this.changePage = function(evtObj) { //Ҏ点击后传q来的参数决定是?或是?
if(evtObj == "next") {
this.currentPage += 1;
alert("你已执行当前页?Q现在当前页是:" + this.currentPage);
}else if(evtObj == "pre"){
//此处不作if(this.currentPage ==1) return;限制Z体现当传入的参数?pre"Ӟ下面的alert()一定会执行
this.currentPage -= 1;
alert("你已执行当前页?Q现在当前页是:" + this.currentPage);
}
};
//...省略其它代码
}
q样的代码,你很Ҏ看出this是指PagesSystem, 那么我们l箋往下看
假设 A对象的原型如?
function A() {//@4
//...
this.onclick;
this.doClick = function() { //点击
this.onclick();//执行
}
//...
}
当你在PagesSystemҎ?br />
_a.onclick = function(){ //@1 当点LQ?上一?Q铵钮时执行
testUse("pre"); //参看@3
alert(this.tagName);
this.changePage("pre");
}
写上q样的代码后,你可以离p为@4的代码的模样是如下:
function A() {//@4
//...
this.onclick = function(){ //@1 当点LQ?上一?Q铵钮时执行
testUse("pre"); //参看@3
alert(this.tagName); //@5
this.changePage("pre"); //@6
};
this.doClick = function() { //点击
this.onclick();//执行
}
//...
}
呵呵。。如果这L的话Q@5,@6中的this当然是指a对象Q没异义。那当然是没changePageҎ?br />
3、那么如何解册问题呢?Q?br />
很幸q,prototype.js中的bindҎ可以解册L问题Q它q解x们上面提的传参数问题?br />
看bind大侠帅样:
bind: function() {
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
var __method = this, args = $A(arguments), object = args.shift();
return function() {
return __method.apply(object, args.concat($A(arguments)));
}
}
bindҎ中的this是bindҎ的所属者(上下文)? f.bind(),f是一个声明了的方?那么bind Ҏ里的this是f
再细看,bindҎ其实做的工作是返回一个匿名函?此匿名函数帮忙执行this所指的ҎQbindҎ的所属者)Q如果你有如下代?br />
function f(msg) {
this.functionName = "f method";
alert(msg);
alert(this.functionName);
}
button.onclick = f.bind(this, msg); //q里的this指f, 在bindҎ中用object = args.shift()获得Q这L话,当点击button后执行fҎ, fҎ中的this׃会无故被 button代替。^_^不然Q会报错的啊Qbutton哪来functionNameQ呵?..
它既解决msg参数传过去,同时fl定到button环境下,bindҎ得名可能是q意义吧。至于如何实现将fl定Q靠的就是applyҎ?br />
apply谜h色彩q你们自行L开啦!
介绍了bind大侠l大Ӟ我的例子麻烦你们自p通它啦。谢了。?br />
Ƣ迎交流指正?br />
备注Q?nbsp;如需转蝲本文Q请注明出处

]]>- 用javascript实现较ؓ通用的客L分页lghttp://m.tkk7.com/sonnylys/archive/2008/05/04/198279.htmlSonny LiSonny LiSun, 04 May 2008 14:54:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/05/04/198279.htmlhttp://m.tkk7.com/sonnylys/comments/198279.htmlhttp://m.tkk7.com/sonnylys/archive/2008/05/04/198279.html#Feedback23http://m.tkk7.com/sonnylys/comments/commentRss/198279.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/198279.html
<html>
<head>
<script src="pageSystem.js"></script>
<script>
var psys;
window.onload = function() {
psys = new PageSystem(1120, "pageDiv", 10, showMsg); //总记录数, 分页pȝ容器Q每l?0?回调
psys.init();
}
function showMsg(currentPage, pageSize) {
//回调Ҏ自定义,两个参数Q第一个ؓ当前,W二个ؓ每页记录?br />
/****************currentPage和pageSizeh数据更新列表,最好用ajax技?*****************/
alert("h数据要的相应参数>> currentPage: "+ currentPage + " pageSize: " + pageSize);
}
/*****如果要更新分늳l请如下操作******/
//psys.update(count); //@count 录L
function updatePageSys() {
psys.update(150); //@count 录L
}
</script>
<style>
#pageDiv{
font-size:13px;
}
</style>
</head>
<body>
<div id="pageDiv">
</div>
<br/><br/>
<a href="#" onclick="updatePageSys();"/>更新分页pȝ</a>
</body>
</html>
2、pageSystem.js
function PageSystem(count, divID, grountCount, callBack) {
this.totolCount = count; //总记录数
this.initMaxPage = grountCount? grountCount: 5; //昄|Q如 1 2 3 4 5
this.pageSize = 10; //每页记录?br />
this.currentMax = 0; //当前昄的最大页? ?1 2 3 4 5; 5为最大页?br />
this.currentMin = 0; //当前昄的最页? ?11 12 13 14 15; 11为最页?br />
this.homePage = 0; //首页
this.endPage = 0; //未页
this.currentPage = 0; //当前?br />
this.currentActiveSpan; //当前zda容器
this.pageDivObj = document.getElementById(divID); //分页pȝ容器
this.pages = 0; //总页敎ͼ计算得到
//this._url = _url; //提交URL
this.callBack = callBack; //回调
var that = this; //指针的引?br />
this.init = function() {
this.pages = parseInt(this.totolCount / this.pageSize); //获得d有几?br />
this.pages = this.totolCount % this.pageSize == 0? this.pages: this.pages+1;
this.createHomePage();
this.createPrePage();
var n = 1;
while(n <= this.pages) {
if(n > this.initMaxPage){
break; //到达最大显C数
}
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:10px";
if(n == 1) { //初始化时W一ؓzd?br />
_span.innerText = n;
this.currentActiveSpan = _span;
}else{
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.reView;
_a.innerText = n;
_span.appendChild(_a);
}
this.pageDivObj.appendChild(_span);
n++;
}
if(this.pages != 0) {
this.currentMax = n - 1; //当前l最大页?1 2 3 4 5gؓ5
this.currentMin = 1; //当前最页?1 2 3 4 5 gؓ1
this.homePage = 1; //首页
this.endPage = this.pages; //未页
this.currentPage = 1; //当前?br />
}
//alert(this.currentMax);
//alert(this.currentMin);
this.createNextPage();
this.createEndPage();
};
this.query = function() {
var curPage = that.currentPage; //当前?br />
var pageSize = that.pageSize;
if(that.callBack) that.callBack(curPage, pageSize);
};
this.reView = function() {
//重新渲染UI
that.reViewActivePage();
that.query();
};
this.reViewActivePage = function() {
//重新渲染当前视?br />
var actA = event.srcElement; //当前被点ȝ a对象
var ap = actA.parentNode; //获得当前a容器span对象
//q原当前视?br />
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.reView;
_a.innerText = that.currentActiveSpan.innerText;
that.currentActiveSpan.innerText = "";
that.currentActiveSpan.appendChild(_a);
//渲染新的当前视?br />
that.currentActiveSpan = ap; //切换当前zd容?br />
var curPage = parseInt(actA.innerText);
that.currentActiveSpan.removeChild(actA);
that.currentActiveSpan.innerText = curPage;
this.currentPage = curPage; //更改当前늠
if(!that.toNextGroup()) that.toPreGroup();
};
this.toNextGroup = function() {
//重新渲染昄下一l?1 2 3 4 5 --> 5 6 7 8 9
if(that.currentPage == that.currentMax) {//点击的页码ؓ当前l最大页码,当go 下一l?br />
if(that.currentPage != that.endPage) { //如果点了未页当然不会再有下一l啦Q?br />
that.pageDivObj.innerHTML = ""; //@1
var pageCode = parseInt(that.currentPage) + 1; //昄늠
var n = 2; //当前zd不重创
this.createHomePage();
this.createPrePage();
that.currentActiveSpan.innerText = that.currentPage;
that.pageDivObj.appendChild(that.currentActiveSpan); //当前活动页回放,L@1
while(pageCode <= that.pages) {
if(n > that.initMaxPage){
break; //到达最大显C数
}
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:10px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = that.reView;
_a.innerText = pageCode;
_span.appendChild(_a);
that.pageDivObj.appendChild(_span);
pageCode++;
n++;
}
that.currentMax = pageCode - 1;
that.currentMin = that.currentPage;
// alert("currentMax: " + that.currentMax);
// alert("currentMin: " + that.currentMin);
this.createNextPage();
that.createEndPage();
return true;
}//end if
}//end if
return false;
};
this.toPreGroup = function() { //
//重新渲染昄上一l?5 6 7 8 9 -->1 2 3 4 5
if(that.currentPage == that.currentMin) { //点了l中最页?br />
if(that.currentPage != 1) {
that.pageDivObj.innerHTML = ""; //@2
var pageCode = parseInt(that.currentPage) - (that.initMaxPage -1); //昄늠
var n = 2; //当前zd不重创
this.createHomePage();
this.createPrePage();
while(true) {
if(n > that.initMaxPage){
break; //到达最大显C数
}
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:10px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = that.reView;
_a.innerText = pageCode++;
_span.appendChild(_a);
that.pageDivObj.appendChild(_span);
n++;
}
that.currentMax = that.currentPage;
that.currentMin = pageCode - (that.initMaxPage -1);
//alert("currentMax: " + that.currentMax);
// alert("currentMin" + that.currentMin);
that.currentActiveSpan.innerText = that.currentPage;
that.pageDivObj.appendChild(that.currentActiveSpan); //当前活动页回放,L@2
that.createNextPage();
that.createEndPage();
}//end if
}//end if
};
this.toHomePage = function(){
//d首页
if(that.pages == 0) return;
if(that.currentPage != 1) {//切组
that.pageDivObj.innerHTML = "";
that.init();
}//end if
that.currentPage = 1;
that.currentMin = 1;
that.currentMax = that.initMaxPage;
that.query();
};
this.toEndPage = function() {
//d未页
if(that.pages == 0 ||that.currentPage == that.pages) return;
if(true) {//切组条g修改Q此条g作废,临时设ؓtrue
that.pageDivObj.innerHTML = "";
that.createHomePage();
that.createPrePage();
var pageCode = 1;
var n = 1;
while(pageCode <= that.pages) {
if(n > that.initMaxPage-1){
n = 1;
}
n++;
pageCode++;
}
pageCode = that.pages - (n-2);
for(var j = 1; j < n; j++) {
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:10px";
if(pageCode == that.pages) { //初始化时W一ؓzd?br />
_span.innerText = pageCode;
that.currentActiveSpan = _span;
}else{
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = that.reView;
_a.innerText = pageCode;
_span.appendChild(_a);
pageCode++;
}
that.pageDivObj.appendChild(_span);
}
that.createNextPage();
that.createEndPage();
}//end if
that.currentPage = that.pages;
that.currentMin = that.pages - (n-2);
that.currentMax = that.pages;
// alert("currentMin: " + that.currentMin);
//alert("currentMax: " + that.currentMax);
// alert("pages: " + that.pages);
that.query();
};
this.next = function() {
//下一?br />
};
this.pre = function() {
//上一?br />
};
this.update = function(count) {
//更新分页pȝ
this.totolCount = count;
that.pageDivObj.innerHTML = "";
this.init();
};
this.createPrePage = function() {
return;
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:16px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.pre;
_a.innerText = "上一?;
_span.appendChild(_a);
this.pageDivObj.appendChild(_span);
};
this.createNextPage = function() {
return;
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:16px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.next;
_a.innerText = "下一?;
_span.appendChild(_a);
this.pageDivObj.appendChild(_span);
};
this.createHomePage = function() {
var homeSpan = document.createElement("SPAN");
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.toHomePage;
_a.innerText = "首页";
homeSpan.appendChild(_a);
this.pageDivObj.appendChild(homeSpan);
};
this.createEndPage = function() {
var _span = document.createElement("SPAN");
_span.style.cssText = "margin-left:16px";
var _a = document.createElement("A");
_a.href = "#";
_a.onclick = this.toEndPage;
_a.innerText = "未页(" + this.pages +")";
_span.appendChild(_a);
this.pageDivObj.appendChild(_span);
}
}
3、效果图
如需转蝲Q请注明原文出处Q谢谢合作?/span>

]]> - ?window.showModalDialog()"实现DIV模式弹出H口http://m.tkk7.com/sonnylys/archive/2008/05/01/197683.htmlSonny LiSonny LiThu, 01 May 2008 13:33:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/05/01/197683.htmlhttp://m.tkk7.com/sonnylys/comments/197683.htmlhttp://m.tkk7.com/sonnylys/archive/2008/05/01/197683.html#Feedback15http://m.tkk7.com/sonnylys/comments/commentRss/197683.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/197683.html
1、test.html 试?/strong>
<html>
<head>
<title>试面</title>
<style>
.list {
border-top:1 solid #8A2BE2;
border-left:1 solid #8A2BE2;
border-right:1 solid #8A2BE2;
}
.list td {
border-bottom: 1 solid #8A2BE2;
}
</style>
<script>
function $(el) {
return document.getElementById(el);
}
function showWin(param) {
window.showModalDialog("dailog.htm", param, "dialogWidth:" +param.width +"px;dialogHeight:"+param.height+"px;center:yes;help:no;scroll:no;status:no;resizable:no");
}
function TB(tbid) {
this.tb = typeof(tbid) == "string"? $(tbid): tbid;
this.getValue = function(rowIndex, cellIndex){
var trs = this.tb.rows[rowIndex];
var _td = trs.cells[cellIndex];
return _td.innerText;
}
this.setValue = function(rowIndex, cellIndex, value) {
var _tr = this.tb.rows[rowIndex];
var _td = _tr.cells[cellIndex];
_td.innerText = value;
}
/********获取行烦?*******/
this.findRowIndex = function(eventSrc) {
var _tr = eventSrc; //eventSrc事g?必须在TD里获事g源是TD或TR本n
while(_tr.tagName != "TR") {
_tr = _tr.parentNode;
}
var trs = this.tb.rows;
for(var i = 0; i < trs.length; i++){
if(_tr == trs[i]) return i;
}
}
}
function edit() {
var tb = new TB("data");
rIndex = tb.findRowIndex(event.srcElement);
$("updateRowIndex").value = rIndex;
$("userName").value = tb.getValue(rIndex, 1); //获得姓名
$("sex").value = tb.getValue(rIndex, 2); //获得性别
$("age").value = tb.getValue(rIndex, 3); //获得q龄
showWin({title:"修改用户信息", width:390, height:230, _div:"openWin",parent:window});
}
function saveAndUpdateView(){
var updateRowIndex = $("updateRowIndex").value;
var tb = new TB($f("data")); //$f()在dailog.html定义,获到的table是父H口中的table
tb.setValue(updateRowIndex, 1, $("userName").value);
tb.setValue(updateRowIndex, 2, $("sex").value);
tb.setValue(updateRowIndex, 3, $("age").value);
close();
}
</script>
</head>
<body>
<p style="margin-top:60px">
<center>
<table id="data" class="list" width="460px">
<tr>
<td>~号</td>
<td>用户?lt;/td>
<td>性别</td>
<td>q龄</td>
<td>操作</td>
</tr>
<tr>
<td>1</td>
<td>李永?lt;/td>
<td>?lt;/td>
<td>27</td>
<td><span style="background:#FAEBD7;cursor:hand" onclick="edit();"> 修改 </span></td>
</tr>
<tr>
<td>2</td>
<td>林兄</td>
<td>?lt;/td>
<td>27</td>
<td><span style="background:#FAEBD7;cursor:hand" onclick="edit();"> 修改 </span></td>
</tr>
<tr>
<td>3</td>
<td>叶兄</td>
<td>?lt;/td>
<td>23</td>
<td><span style="background:#FAEBD7;cursor:hand" onclick="edit();"> 修改 </span></td>
</tr>
</table>
</center>
</p>
<!---弹出H口昄的内?--->
<div id="openWin" style="display:none;">
<form>
<fieldSet>
<legend>修改用户</legend>
<table>
<tr>
<td>用户?lt;/td><td><input type="text" id="userName"/></td>
</tr>
<tr>
<td>性别</td><td><input type="text" id="sex"/></td>
</tr>
<tr>
<td>q龄</td><td><input type="text" id="age"/></td>
</tr>
</table>
</fieldSet>
<input type="hidden" id="updateRowIndex"/>
</form>
<span style="background:#FAEBD7;cursor:hand" onclick="saveAndUpdateView();"> 修改 </span>
</div>
</body>
</html>
2、dailog.html H口原型
<html>
<head>
<script>
var param = window.dialogArguments; //传过来的模式对话框窗口参?br />
document.title = param.title; //H口标题,必须在窗口创建前实现s
/********父H口的js加蝲q来********/
var scripts = param.parent.document.scripts;
var _head = document.getElementsByTagName("head")[0];
for(var n = 0; n < scripts.length; n++) {
if(scripts[n].src) {
var _script = newEl("script");
_script.src = scripts[n].src;
bind(_head, _script);
}else{//加蝲直接在html文中写的script
var _script = newEl("script");
_script.text = scripts[n].text;
bind(_head, _script);
}
}
/*******ҎID获得父窗口的元素*********/
function $f(el) {
return param.parent.document.getElementById(el);
}
/***********创徏一个HTML元素*******/
function newEl(tagName) {
return document.createElement(tagName);
}
/***********q加元素***************/
function bind(ower, child) {
ower.appendChild(child);
}
/*******在浏览器完成对象的装载后立即触发*********/
window.onload = function() {
var winDiv;
if(typeof(param._div) == "string") {
winDiv = param.parent.document.getElementById(param._div); //父窗口window对象,因ؓparam._div对象在父H口
}else{//直接传对象过?br />
winDiv = param._div;
}
$("mainDiv").innerHTML = winDiv.innerHTML; //DIV内容在弹出窗口中渲染
}
</script>
</head>
<body>
<center>
<div id="mainDiv" style="margin-top:20px;width:90%"></div>
</center>
</body>
</html>
如需转蝲Q请注明原文出处Q谢谢合作?/span>

]]> - 用模式对话框实现“消息提C框”和“操作提C框?/title>http://m.tkk7.com/sonnylys/archive/2008/05/01/197655.htmlSonny LiSonny LiThu, 01 May 2008 07:54:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/05/01/197655.htmlhttp://m.tkk7.com/sonnylys/comments/197655.htmlhttp://m.tkk7.com/sonnylys/archive/2008/05/01/197655.html#Feedback2http://m.tkk7.com/sonnylys/comments/commentRss/197655.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/197655.html
׃本h认ؓ?alert()和confirm()的消息框和操作确认对话框Q界面不太友好,下面介绍用模式对话框实现“消息提示 ?#8221;?#8220;操作提示?#8221;Q用模式对话框也可以实现弹出H口(抱括Iframe模式及DIV模式Q,DIV模式较麻烦些Q不q,q挺实用Q这里不作介l?
1、test.html 试?/strong>
<html>
<head>
<title>试面</title>
<script>
/**** 打开消息?***
* @param 为Objectcd,原型?{msg:"val1", time:val2},val1提示的消息,val2为窗口出来后延迟关闭的时?
*
*/
function showMsg(param) {
window.showModalDialog("msg.html", param, "dialogWidth:280px;dialogHeight:180px;center:yes;help:no;scroll:no;status:no;resizable:no");
}
/****操作认H口*****
* @param 为stringcd,提示信息
* @return true为选取?#8220;定”铵钮Qfalse为选取?#8220;取消”铵钮
*/
function confirm(msg) {
return window.showModalDialog("confirm.html", msg, "dialogWidth:280px;dialogHeight:180px;center:yes;help:no;scroll:no;status:no;resizable:no");
}
function confirmDel() {
var rval = confirm("定删除此用户吗Q?);
if(rval) {
showMsg({msg:"你点M定铵钮", time:1200});
}else{
showMsg({msg:"你点M取消铵钮", time:1200});
}
}
</script>
</head>
<body>
<center>
<a href="#" onclick="showMsg({msg:'1U钟后会自动关闭的提CZ息框', time:1000})">会自动关闭的提示信息?lt;/a>
<br/>
<a href="#" onclick="confirmDel();">操作认对话?lt;/a>
</center>
</body>
</html>
2、msg.html 消息框通用模板
<html>
<head>
<title>提示对话?lt;/title>
<script>
var obj = window.dialogArguments; //传过来的模式对话框窗口参?br />
/****在obj.timeU后关闭H?***/
window.setTimeout(function() {
window.close();
}, obj.time);
</script>
</head>
<body>
<p style="margin-top:36px">
<center>
<script>
document.write(obj.msg); //打印信息
</script>
</center>
</p>
</body>
</html>
3、confirm.html
<html>
<head>
<title>操作认对话?lt;/title>
<script>
function setState() {
returnValue = event.srcElement.id == "ok"? true: false;
window.close();
}
</script>
</head>
<body>
<p style="margin-top:26px">
<center>
<script>
var msg = window.dialogArguments? window.dialogArguments: "";
document.write(msg);
</script>
<br/>
<div style="margin-top:20px">
<a href="#" id="ok" onclick="setState()">定</a>
<a href="#" id="cal" onclick="setState()">取消</a>
</div>
</center>
</p>
</body>
</html>
q行test.html例子可以看到相应的效?br />


]]> - 单的javascript入门知识http://m.tkk7.com/sonnylys/archive/2008/04/27/196669.htmlSonny LiSonny LiSun, 27 Apr 2008 14:53:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/04/27/196669.htmlhttp://m.tkk7.com/sonnylys/comments/196669.htmlhttp://m.tkk7.com/sonnylys/archive/2008/04/27/196669.html#Feedback2http://m.tkk7.com/sonnylys/comments/commentRss/196669.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/196669.html
一?JavaScript E序其实是一个文档,一个文本文Ӟ它嵌入到 HTML 文档中执行。所以,一般的本文~辑器就可以实现~写javascript代码?br />
1、将javascript嵌入到HTML文中,一般有两种实现Ҏ。一U是直接在HTML文中的M地方加入<script>
<!--你的js代码-->
</script>
值得注意的是Qjs代码必须?lt;frameset>之前插入才有效?br />
另一U是js代码写在一个以 .js为后~的js文g里,用以下方法引入到HMTL供使用
<script src="你要引入?js文g的\? type="text/javascript"></script>
q两U实现的例子如下Q?br />
<html>
<head>
<title>js exmaple</title>
<!--直接在HMTL文中写js代码-->
<script>
function sayHello() {
alert("hello");
}
</script>
<!--?js文g中加?->
<script src="myjs/util.js"></script>
</head>
<body>
</body>
</html>
2、变量声?br />
javascript中用 var关键字声明一个变量,如:var userName;׃javascript使用的是q型,所以声明时不需要指定具体类型,在运行时会根据所赋的值检查其数据cd。比如声?var v; 在运行中如果出现v = 123;那么变量v指数值类型,如果q行中出现的是v = "123"Qv 为字W串cd?br />
3、函数声明,介绍两种型式
一、function sayHello(who) { //who为参?br />
alert("say hello to: " + who);
}
二、var sayHello = function(who) {
alert("say hello to: " + who);
}
说明Q第二种声明方式是将函数的指针赋l一个变量,调用如下QsayHello("whoOne");和第一U声明方式调用一栗D个第二种声明方式有用的应用,如,在js代码中,l一个铵钮的onclick事g注册一个方法可以如下声明: var btn = document.createElement("button");
btn.onclick= function() {
//d当点L铵钮时想执行的js代码
}
4、事件响?br />
声明了的函数可以在js代码里被调用Q也可以用于响应事g。如Q?br />
<html>
<head>
<title>js exmaple</title>
<!--直接在HMTL文中写js代码-->
<script>
function sayHello() {
alert("hello");
}
</script>
</head>
<body>
<!--响应button中的onclick事gQ单MӞ,调用sayHello()Ҏ-->
<button onclick="sayHello()">点击调用sayHello()Ҏ来响?lt;/button>
</body>
</html>
q行例子Q点击铵钮后q行l果如下Q?br />

备注Q这是一很单的javascript相关知识文章Q适合对javascript完全没概늚初学者参考, 有误之处Q请指正讨论?br />

]]> - Spring与Struts集成开?/title>http://m.tkk7.com/sonnylys/archive/2008/03/01/183112.htmlSonny LiSonny LiSat, 01 Mar 2008 03:08:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/03/01/183112.htmlhttp://m.tkk7.com/sonnylys/comments/183112.htmlhttp://m.tkk7.com/sonnylys/archive/2008/03/01/183112.html#Feedback2http://m.tkk7.com/sonnylys/comments/commentRss/183112.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/183112.html
Spring与Struts集成开?br />
最q喜Ƣ将所学的东西理顺一下,且发现写blog可以达成q目的?br />
那就来整理一下我对Spring与Struts集成开发的一些想法?br />
首先认pȝ的结构ؓ三层的B/S模式l构Q如下图Q?br />

在图中看出,Spring和Struts集成开发中QSpring在业务逻辑层被使用Q集成)。因为Spring框架的依赖注入,AOP及可声明的事务管理方面的技术优势,使得用Spring来管理业务实体,实体之间的依赖关p,业务逻辑服务接口变得单且可配|。至此我们要清楚Q?span style="color: red">Spring和Struts集成开发中QSpring在业务逻辑层被使用Q集成)?/span>
清楚Struts和Spring在系l结构中分别充当的角色后Q接下来要讨论:如何实现集成Q?br />
1、用Spring的ActionSurpertc集成Struts?/strong>
org.springframework.web.struts.ActionSurpert是一个承org.apache.struts.action.Action的类Q简要代码如下:
public abstract class ActionSurpert extends Action {
private WebApplicationContext webApplicationContext;
public void setServlet(ActionServlet actionServlet) {//当容器实例化此Action时被容器调用
surper.setServlet(actionServlet);
if(actionServlet != null) {
this.webApplicationContext = initWebApplicationContext(actionServlet);//获取webApplicationContext
//........
}else{
//.......
}
}
//通过getXXX()Ҏ获取 webApplicationContext 对象
protected final WebApplictionContext getWebApplicationContext() {
return this.webApplicationContext;
}
}
通过上述代码可以看出Q所有承了ActionSupportcȝAction可以通过WebApplicationContext对象的getBean(beanKey)Ҏ获得Spring配置文g中定义的各种Bean?br />
WebApplicationContext要由Web Server来加载,有两U方法:
Q、通过org.springframework.web.struts.ContextLoaderPlugIn加蝲QContextLoaderPlugIn是个插gQ需要在Struts配置文g中配|?br />
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property = "contextConfigLocation" value="/WEB-INF/applicationContext.xml"></set-property>
</plug-in>
2、在web.xml文g中加?br />
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
举个单的例子说明一下相关配|信息:
假定有ExampleActionQExampleBeanQExampleServiceq几个类Q它们工作流E是Q?br />
用户hExampleActionQExampleAction调用ExampleService的接口方法对ExampleBeanq行相关的操作?br />
1、applicationContext.xml中配|相关的bean信息
<beans>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost:3306/ssh?useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="exampleBean" class="org.mypackge.beans.ExampleBean"/>
<bean id="exampleBeanService" class="org.mypackge.services.ExampleService"/>@
</beans>
通过q样配置后,在ExampleAction中可以用getWebApplicationContext() 获得webApplicationContext对象Q然后通过
webApplicationContext的getBean(beanKey)Ҏ获得相应的beanq行业务处理。标了红色的"beanKey"是applicationContext.xml?lt;bean>元素定义的bean idQ如:webApplicationContext.getBean("exampleBeanService")。@
当然QExampleActionq要在stuts-config.xml配置文g中配|,q里不作介绍?br />
2、用Spring的Action代理集成Struts
q种集成方式的核心思想是,Struts的配|文件中的所有Action的type属性设为org.springframwork.web.struts.DelegationActionProxy。当用户hActionӞ执行这代理Q代理会在Spring应用上下文中扑ֈ真正的ActionQ然后交l它处理用户的请求。而真正用于处理用戯求的Action的配|放在了Spring的配|文件中。这PStruts中的Action以及其依赖关pd可以用Spring容器来管理,比如业务逻辑对象注入到Action中,供其使用。简单片D?lt;bean name="/exampleAction" class="org.myproj.struts.actions.ExampleAction">
....
</bean>
说明Q用name属性而不是用id来标识这个Bean,Spring不允许ID中出?/"Q而name可以Q?name"属性D和struts-config.xml文g中相?lt;action>元素中的path属性值相?span style="color: #ff99cc">(<action path="/exampleAction")Q这样Action代理才能扑ֈ相应的Action来处理请求?br />
Ƣ迎讨论Q提出宝贉|见?br />

]]> - struts与hibernate集成开?/title>http://m.tkk7.com/sonnylys/archive/2008/02/29/183017.htmlSonny LiSonny LiFri, 29 Feb 2008 10:44:00 GMThttp://m.tkk7.com/sonnylys/archive/2008/02/29/183017.htmlhttp://m.tkk7.com/sonnylys/comments/183017.htmlhttp://m.tkk7.com/sonnylys/archive/2008/02/29/183017.html#Feedback0http://m.tkk7.com/sonnylys/comments/commentRss/183017.htmlhttp://m.tkk7.com/sonnylys/services/trackbacks/183017.html
最q学习struts与hibernate相关知识Q下面是个h对struts与hibernate集成开发的一些见解,写出来跟大家共同讨论、学习,Ƣ迎指教?br />
要集成struts与hibernateq行开发,首先应该了解一下struts和hibernate框架各自的工作原理和模式般的开发流E?br />
首先介绍struts的大概工作流E,下面通过一张struts工作的时序图来说明其工作程Q?br />

Struts工作程分析Q?br />
1QWeb服务器启动,初始化ActionServlet,dstruts-config.xml文g配置信息Q把q些信息分发到相应的对象中?br />
2Q用户发求后QActionServlet接收到请求,查找与请求匹配的Action映射对象QActionMapping)对象是否存在Q是Q将h以及Actionform对象传递给相应的Action对象?br />
3QAction调用业务逻辑服务接口Q结合ActionFormQ对用户的请求做出处理?/strong>
4QAction处理完毕q回ActionForward对象lActionServlet。ActionForward对象包含了{发目标对象,可以是jsp或Action?br />
5)ActionServletҎActionForward对象的指向l{发请求,重复从第2步进行处理?br />
xQ我们对struts 的基本工作流E有个整体的认识Q但q没提hibernate相关的Q何知识,业务逻辑层也只是在第3)点微提一下?br />
接下来,我们来看下hibernate是怎样工作的?(注:在这不是讨论QRQ的实现Q只讨论怎让hibernateqORM中间件工作)
Hibernate是个独立的框Ӟ它不依赖M的Web Server或Application ServerQ就是说不需要这些支持?br />
Hibernate有五个核心接口,分别为Configuratoin, SessionFactory, Session,Query及Criteria。通过q些接口可以完成hibernate的初始化Q对持久化对象进行存取,更新{操作?br />
下面要介始一下这些接口?br />
1、Configuration接口 是Hibernate应用的入口,在开始用Hibernate的各U功能之前需要先创徏Configuration对象。它负责加蝲Hibernate 应用配置文gQ如Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");
2、SessionFactory接口 ~存了Configuration对象所包含的配|信息,能根据映信息自动生成SQL语句Qƈ提供生成Session对象的方法?br />
3、Session接口提供一pd持久化的操作?br />
到此Q可以写一段代码来加看下如何使用hibernate
Configuration cf = new Configuration.configure("com/myproj/hibernate/configs/hibernate.cfg.xml");//配置文g不在此作介绍
SessionFactory sessionFactory = cf.buildSessionFactory();
Session session = sessionFactory.openSession();
session.update();
session.save();{等持久化操作?br />
xQ简单介l了hibernate 是怎样工作的,其实我只惌你清楚:“Hibernate是个独立的框Ӟ它不依赖M的Web Server或Application ServerQ就是说不需要这些支持?#8221;
那么Q我们要回到主题来:如何集成struts与hibernate开发?{案很简单:hibernate和struts本质上是没什么联pȝQ只要你CQ?span style="color: red">Hibernate是个独立的框Ӟ它不依赖M的Web Server或Application Server?/span>用DAO模式把hibernate持久化的操作装好,供业务逻辑服务c调用就可以。回q头来看struts工作时序图的解释的W三点:“3QAction调用业务逻辑服务接口Q结合ActionFormQ对用户的请求做出处理?/strong>”Q不隑־出:
用户h后,struts负责扑ֈ相应的Action对象QAction调用业务逻辑服务接口Q业务逻辑服务接口调用DAO接口(q里默认的实现就用hibernate,当然, q可以有多种Ҏ据库操作的实玎ͼ
hibernate充当下面q张图中?持久层(DAOQ?

׃本h对struts及hibernate认识不深Q写q篇文章只是抛砖引玉Q希望高手们发表意见指正错误Q多指教?br />

]]>
վ֩ģ壺
Ʒר|
þ99ëƬѹۿ|
þԭavapp|
ӰƬ鶹ӰƬѹۿ
|
˾ƷƵ|
ŷպٲ|
AV鶹
|
ڵƵ߹ۿ
|
ַ|
aëƬa|
ѾƷƵ|
Ļѹۿַ|
ĻȫѰƵ|
߳þѹۿ|
˸һþ|
˳ɵӰվɫ|
˾Ʒۺں|
þþþƷС˵|
˳վɫ|
ĻӰԺѲ|
㻨ۿ
|
Ƶվ|
Ʒ|
aƬ777777
|
ĻƵƷһ|
лGAYƬվWWW|
AVպۺһ|
þþþƷַɫ
|
Ƶ߹ۿ|
ðѾƷƵ
|
þӰԺվ|
ŷƷպһҹҹ|
ִִֺƵ|
һaƵ|
˳վ߲|
þþƷ|
Ʒһ߾þ|
Ʒþþ|
avһ
|
AVѿ|
þøԴվѿ|