寒江雪
BlogJava
首页
新随笔
联系
聚合
管理
posts - 8, comments - 174, 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
月月鸟
阅读(3042)
评论(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新闻
Chat2DB
C++博客
博问
管理
相关文章:
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
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(5)
给我留言
查看公开留言
查看私人留言
随笔分类
(8)
ajax(2)
eclipse
flex(1)
hibernate
ibatis
J2EE(1)
J2SE(1)
javascript
jsf
spring
struts
webwork
其他(3)
报表(report)
随笔档案
(8)
2007年8月 (8)
文章分类
(1)
flex
其他(1)
新技术
文章档案
(1)
2012年4月 (1)
其他
ext 中文文档中心
javascirpt封装库API中文文档
Flex中文网站
ORM Tool
中间件技术
娱乐
技术
dhtml学习
ext中文学习中心
Flex程序示例
prototype1.5.0中文API在线版
SpringSide---企业应用的开源构件库
搜索
积分与排名
积分 - 115825
排名 - 505
最新随笔
1. PostgreSQL 数据库性能提升的几个方面
2. 收藏微软面试智力题 (附答案)
3. struts2.0 + ajax + xml (附源码)
4. 经典收藏----和大家一同分享
5. 尝试Flex3 令人振奋的新功能——framework持久化缓存
6. LOG4J 之经典篇
7. swing 选择日期控件
8. 探讨J2EE开发框架-----高手留言
9. struts 2.0 + 原始 AJAX + XML
最新评论
1. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--月月鸟
2. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--月月鸟
3. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--pt
4. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--pt
5. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--pt
6. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--pt
7. re: PostgreSQL 数据库性能提升的几个方面
黄金时时彩全能计划王
黄金时时彩全能计划王
--pt
8. re: swing 选择日期控件
@交口称赞 邮箱arvinsw521403@163.com
--zhangyi
9. re: swing 选择日期控件
@交口称赞 求下拉出时间的代码!感激不尽
--zhangyi
10. re: PostgreSQL 数据库性能提升的几个方面
评论内容较长,点击标题查看
--pt
评论排行榜
1. 收藏微软面试智力题 (附答案)(104)
2. struts2.0 + ajax + xml (附源码)(17)
3. swing 选择日期控件(13)
4. 探讨J2EE开发框架-----高手留言(10)
5. struts 2.0 + 原始 AJAX + XML(9)
6. LOG4J 之经典篇(7)
7. 尝试Flex3 令人振奋的新功能——framework持久化缓存(3)
8. 经典收藏----和大家一同分享(1)