寒江雪
如果人生最坏只是死亡,生活中怎么会有面对不了的困难!!!
BlogJava
首页
新随笔
联系
聚合
管理
posts - 8, comments - 111, trackbacks - 0
struts2.0 + ajax + xml (附源码)
程序更新:1、添加了对页面显示数据量的控制。
2、添加了删除数据后,动态刷新表数据功能。
源码下载:
test.rar
更新文件:1、index.jsp
2、UserAction.java
注意事项:1、由于加包后文件太大,源码中没有struts2.0 相关jar包。
2、该程序没有用到数据库,加入jar包后直接在web容器上运行即可。
3、如果需要完整的源码,请留言你的邮箱,或者联系QQ:303225497。
更新代码:
index.jsp
<%
@ page language
=
"
java
"
pageEncoding
=
"
UTF-8
"
%>
<!
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
>
<
html
>
<
head
>
<
title
>
test javascript
</
title
>
</
head
>
<
script
defer
="defer"
>
//
XMLHTTP对象
var
xmlHttp;
//
删除数据所在的行id
var
deleteRowId;
/**/
/*
*
* 发送请求、调用回调方法
*
* @param url: 请求的URL
* afterMothod:请求返回时所调用的方法名称(回调方法)
*
*/
function
showHint(url,afterMothod)
{
try
{
xmlHttp
=
GetXmlHttpObject(afterMothod);
xmlHttp.open(
"
GET
"
,url,
false
);
xmlHttp.send(
null
);
}
catch
(e)
{
alert(e);
}
}
/**/
/*
*
* 根据浏览器创建XmlHttp对象
*
* @param handler:请求返回时所调用的方法名称(回调方法)
*
*/
function
GetXmlHttpObject(handler)
{
var
objXmlHttp
=
null
;
if
(navigator.userAgent.indexOf(
"
Opera
"
)
>=
0
)
{
alert(
"
This example doesn't work in Opera
"
);
return
;
}
if
(navigator.userAgent.indexOf(
"
MSIE
"
)
>=
0
)
{
var
strName
=
"
Msxml2.XMLHTTP
"
;
if
(navigator.appVersion.indexOf(
"
MSIE 5.5
"
)
>=
0
)
{
strName
=
"
Microsoft.XMLHTTP
"
;
}
try
{
objXmlHttp
=
new
ActiveXObject(strName);
objXmlHttp.onreadystatechange
=
handler;
return
objXmlHttp;
}
catch
(e)
{
alert(
"
Error. Scripting for ActiveX might be disabled
"
);
return
;
}
}
if
(navigator.userAgent.indexOf(
"
Mozilla
"
)
>=
0
)
{
objXmlHttp
=
new
XMLHttpRequest();
objXmlHttp.onload
=
handler;
objXmlHttp.onerror
=
handler;
return
objXmlHttp;
}
}
/**/
/*
*
* 请求返回是调用的回调方法
* 服务器段返回 user 信息以xml形式发送到客户断
* 解析 xml 数据,把数据展现给用户
*
*/
function
flush()
{
try
{
if
(xmlHttp.readyState
==
4
||
xmlHttp.readyState
==
"
complete
"
)
{
//
得到返回过来的XML对象,进行数据处理
var
xmlDoc
=
new
ActiveXObject(
"
Microsoft.XMLDOM
"
);
xmlDoc.async
=
false
;
xmlDoc.loadXML(xmlHttp.responseText)
//
返回错误代码,适合用于测试。
//
var error = xmlDoc.parseError.errorCode;
//
alert(error?xmlDoc.parseError.reason:"XML格式正确");
//
解析XML数据,将数据刷新到userTable中
var
users
=
xmlDoc.getElementsByTagName(
"
user
"
);
//
插入数据前,先清空数据
clearTable(userTable);
for
(
var
i
=
0
;i
<
users.length;i
++
)
{
//
插入行
var
userRow
=
userTable.insertRow();
//
得到行标示
var
rowId
=
userRow.rowIndex;
//
取到一个user对象
var
user
=
users[i];
//
插入序号列
var
userNum
=
userRow.insertCell();
userNum.innerHTML
=
"
<font size=4 color=5adf83><b>
"
+
(i
+
1
)
+
"
</b></font>
"
;
//
插入userid列
var
userId
=
userRow.insertCell();
//
显示userid
userId.innerHTML
=
user.getAttribute(
"
userId
"
);
var
userName
=
userRow.insertCell();
userName.innerHTML
=
user.getAttribute(
"
userName
"
);
var
userTel
=
userRow.insertCell();
userTel.innerHTML
=
user.getAttribute(
"
userTel
"
);
var
userOp
=
userRow.insertCell();
//
生成删除user的url
var
deleteUserURl
=
"
user!delete.action?userNumber=
"
+
getPageUserNumber()
+
"
&user.userId=
"
+
user.getAttribute(
"
userId
"
);
userOp.innerHTML
=
"
<a href=javascript:showHint('
"
+
deleteUserURl
+
"
',drop);>删除</a>
"
;
}
}
}
catch
(e)
{
alert(e.description);
}
}
/**/
/*
*
* 请求返回是调用的回调方法
* 删除 user对象 服务器段返回删除后的操作信息和 user 列表数据
* 客户端将信息和数据展现给用户
*
*/
function
drop()
{
if
(xmlHttp.readyState
==
4
||
xmlHttp.readyState
==
"
complete
"
)
{
var
xmlDoc
=
new
ActiveXObject(
"
Microsoft.XMLDOM
"
);
xmlDoc.async
=
false
;
xmlDoc.loadXML(xmlHttp.responseText);
var
msg
=
xmlDoc.getElementsByTagName(
"
msg
"
)[
0
];
if
(msg.getAttribute(
"
isSuccess
"
)
==
"
false
"
)
{
alert(msg.getAttribute(
"
msgString
"
));
}
else
{
alert(msg.getAttribute(
"
msgString
"
));
flush();
//
删除成功后,刷新数据。
}
}
}
/**/
/*
*
* 清空数据表的数据
*
* @param opTable:所要清空的表对象
*
*/
function
clearTable(opTable)
{
var
size
=
opTable.rows.length;
for
(
var
i
=
2
;i
<
size;i
++
)
{
opTable.deleteRow(
2
);
}
}
/**/
/*
*
* 得到一页显示数据的个数
*
*/
function
getPageUserNumber()
{
return
size.value;
}
/**/
/*
*
* 动态的根据用户选择的显示数进行动态返回刷新操作的URL
*
*/
function
getFlushUserURl()
{
return
"
user!list.action
"
+
"
?userNumber=
"
+
getPageUserNumber();
}
</
script
>
<
body
>
<
center
>
<
h3
>
用户列表
</
h3
>
<
br
>
<
table
id
="userTable"
title
="用户列表"
width
="60%"
>
<
tbody
align
="center"
>
<
tr
bgcolor
="#54821f"
>
<
th
width
="5%"
>
序号
</
th
>
<
th
width
="15%"
>
用户ID
</
th
>
<
th
width
="15%"
>
姓名
</
th
>
<
th
width
="15%"
>
电话
</
th
>
<
th
width
="5%"
>
操作
</
th
>
<
tr
>
</
tbody
>
</
table
>
<
br
>
<
br
>
<
br
>
<
button
onclick
="showHint(getFlushUserURl(),flush);"
>
刷新
</
button
>
<
font
size
="2"
color
="blue"
><
b
>
显示用户数:
</
b
></
font
>
<
select
id
="size"
name
="userSize"
>
<
option
value
="3"
selected
>
3
</
option
>
<
option
value
="5"
>
5
</
option
>
<
option
value
="10"
>
10
</
option
>
<
option
value
="15"
>
15
</
option
>
<
option
value
="20"
>
20
</
option
>
</
select
>
</
center
>
</
body
>
</
html
>
UserAction.java
package
com.wen.test;
import
java.util.List;
import
java.util.Random;
import
java.util.Vector;
import
com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings(
"
serial
"
)
public
class
UserAction
extends
ActionSupport
{
private
User user;
private
int
userNumber;
private
List
<
User
>
userList;
private
List
<
String
>
msgList;
public
String delete()
{
String id
=
user.getUserId();
msgList
=
new
Vector
<
String
>
();
//
当userId第5为是4的时候删除失败
if
(id.charAt(
4
)
==
'
4
'
)
{
msgList.add(
"
false
"
);
msgList.add(
"
删除ID为:
"
+
id
+
"
用户失败!!
"
);
}
else
{
//
删除成功,做删除操作
msgList.add(
"
true
"
);
msgList.add(
"
删除ID为:
"
+
id
+
"
用户成功!!
"
);
}
return
list();
}
public
String list()
{
userList
=
new
Vector
<
User
>
();
//
如果得不到usernuNmber,初始化为3。
userNumber
=
userNumber
==
0
?
3
: userNumber;
//
随即得到 user 对象
for
(
int
i
=
0
; i
<
userNumber; i
++
)
{
user
=
new
User();
user.setUserId(
""
+
new
Random().nextInt());
user.setUserName(
"
name
"
+
new
Random().nextInt());
user.setUserTel(
"
pass
"
+
new
Random().nextInt());
userList.add(user);
}
return
SUCCESS;
}
public
User getUser()
{
return
user;
}
public
void
setUser(User user)
{
this
.user
=
user;
}
public
List getMsgList()
{
return
msgList;
}
public
List getUserList()
{
return
userList;
}
public
void
setUserNumber(
int
userNumber)
{
this
.userNumber
=
userNumber;
}
}
posted on 2007-08-17 15:24
月月鸟
阅读(1712)
评论(17)
编辑
收藏
所属分类:
ajax
FeedBack:
#
re: struts2.0 + ajax + xml (附源码)
2007-08-17 16:03 |
叶枫
谢了,运行通过。
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)[未登录]
2007-08-17 21:33 |
david
wst0350@163.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)[未登录]
2007-08-18 08:07 |
biyeqian
gymai@163.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)[未登录]
2007-08-19 12:44 |
sclsch
mark一下。
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)[未登录]
2007-08-19 12:44 |
sclsch
mark
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-20 12:45 |
ahanflw
请给我一份源码谢谢!81773090@qq.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-24 09:16 |
薛端阳
我以前也作过这种方式的ajax提交,首先为什么要通过actionforward的jsp作为输出内容的载体,直接response输出就可以了,第二 我觉得我觉得ajax提交的处理不应该放在我们的action业务里面,他不算是一个具体的业务逻辑,可以用servlet或者webservice处理,应该是单独的一层,如果您有什么好的见解,希望与您交流
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-24 13:51 |
小影
@薛端阳
1. 首先放到jsp中处理是将数据处理的逻辑与业务剥离,如果放在业务中去处理那么业务就会很庞大,代码也就不太清晰,当然后有其他原因。
2. ajax的业务处理也需要一些信息处理,比如说数据验证、权限问题等等,当然有的业务是不需要通过action就可以处理,比如说访问一些公有的页面等等,但是为了这些而单独的去写servlet或webservice那就完全没有必要了,这样显的系统很杂乱。
当然这只是我个人的意见,大家也可以多多交流。
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-25 21:11 |
badi
非常感谢.
我的邮箱是
zhbadikill@163.com.
先谢谢了.
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-28 18:56 |
winson
非常感谢
我希望发给我 源码
我的邮箱是
master6#163.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-08-31 15:56 |
ghdvb@126.com
感谢啊
我的邮箱
ghdvb@126.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-09-10 18:39 |
xhl
非常感谢
我希望发给我 源码
我的邮箱是 xhl9500@163.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-09-28 23:42 |
sunbeam
非常感谢
希望发给我 源码
我的邮箱是 sunxboy@gmail.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-10-17 11:29 |
fei
kary1109@sina.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2007-11-06 09:52 |
mark
也给我发一份,谢谢mark705@163.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2008-03-19 09:15 |
li
非常感谢
我希望发给我 源码
l_w_qsoft@hotmail.com
回复
更多评论
#
re: struts2.0 + ajax + xml (附源码)
2008-06-18 21:37 |
TYXING
TIANYXI@126.COM
THANK YOU
回复
更多评论
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-08-17 21:54 编辑过
相关文章:
struts2.0 + ajax + xml (附源码)
struts 2.0 + 原始 AJAX + XML
<
2007年8月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
(8)
ajax(2)
eclipse
flex(1)
hibernate
ibatis
J2EE(1)
J2SE(1)
javascript
jsf
spring
struts
webwork
其他(3)
报表(report)
随笔档案
(8)
2007年8月 (8)
文章分类
flex
其他
新技术
其他
ext 中文文档中心
javascirpt封装库API中文文档
Flex中文网站
ORM Tool
中间件技术
娱乐
技术
dhtml学习
ext中文学习中心
Flex程序示例
prototype1.5.0中文API在线版
SpringSide---企业应用的开源构件库
搜索
积分与排名
积分 - 48832
排名 - 251
最新随笔
1. 收藏微软面试智力题 (附答案)
2. struts2.0 + ajax + xml (附源码)
3. 经典收藏----和大家一同分享
4. 尝试Flex3 令人振奋的新功能——framework持久化缓存
5. LOG4J 之经典篇
6. swing 选择日期控件
7. 探讨J2EE开发框架-----高手留言
8. struts 2.0 + 原始 AJAX + XML
最新评论
1. re: 收藏微软面试智力题 (附答案)[未登录]
①把5装满,倒进3里
②倒掉3的水.再把5里剩下的水倒进(3里有2)
③装满5,用5里的水把3倒满,就能得到5里的4
--猪
2. re: 收藏微软面试智力题 (附答案)
超级羡慕出题者的智商
--实话实说
3. re: 收藏微软面试智力题 (附答案)[未登录]
评论内容较长,点击标题查看
--Ming
4. re: 收藏微软面试智力题 (附答案)[未登录]
评论内容较长,点击标题查看
--Ming
5. re: swing 选择日期控件[未登录]
能不能把代码发全? 如果可以的话发一份到我的邮箱jerry_zhou@139.com
--Jerry
6. re: 收藏微软面试智力题 (附答案)
第九题答案有误,同等用材为什么圆形面积最大啊,如果同等用材的话重量、体积都是一样的,高度一样应该是前提,那面积应该是一样的啊,真是麻省理工的教授说的?
--zxg
7. re: 收藏微软面试智力题 (附答案)
当然可以啊 ,坐电梯嘛!
--喜欢难题
8. re: 收藏微软面试智力题 (附答案)
评论内容较长,点击标题查看
--枪杀约翰列侬
9. re: 收藏面试智力题 (附答案)
路过。。。。
--六帅
10. re: 收藏微软面试智力题 (附答案)[未登录]
24题答案???????????
--哈哈
评论排行榜
1. 收藏微软面试智力题 (附答案)(77)
2. struts2.0 + ajax + xml (附源码)(17)
3. swing 选择日期控件(8)
4. 探讨J2EE开发框架-----高手留言(3)
5. struts 2.0 + 原始 AJAX + XML(2)
6. 尝试Flex3 令人振奋的新功能——framework持久化缓存(2)
7. LOG4J 之经典篇(1)
8. 经典收藏----和大家一同分享(1)