寒江雪
BlogJava
首页
新随笔
联系
聚合
管理
posts - 8, comments - 174, trackbacks - 0
struts 2.0 + 原始 AJAX + XML
实现逻辑:
实现user对象的select、delete,动态的将数据更新到表格中。
select: 服务端返回xml数据,在页面进行数据显示。
delete :服务端将删除信息以xml格式返回,包含删除状态和删除信息。
实现技术:
struts 2.0 + AJAX + XML
主要文件:
index.jsp user.java(数据模型) UserAction.java(业务逻辑) struts.xml(struts2.0配置文件)
index.jsp页面:
<%
@ page language
=
"
java
"
pageEncoding
=
"
UTF-8
"
%>
<%
String path
=
request.getContextPath();
String basePath
=
request.getScheme()
+
"
://
"
+
request.getServerName()
+
"
:
"
+
request.getServerPort()
+
path
+
"
/
"
;
%>
<!
DOCTYPE HTML PUBLIC
"
-//W3C//DTD HTML 4.01 Transitional//EN
"
>
<
html
>
<
head
>
<
base href
=
"
<%=basePath%>
"
>
<
title
>
test javascript
</
title
>
</
head
>
<
script defer
=
"
defer
"
>
var xmlHttp;
//
XMLHTTP对象
var deleteRowId;
//
删除数据所在的行
//
url:访问的URL afterMothod:请求返回时所调用的方法(回调方法)
function showHint(url,afterMothod)
{
try
{
xmlHttp
=
GetXmlHttpObject(afterMothod);
xmlHttp.open(
"
GET
"
,url,
false
);
xmlHttp.send(
null
);
}
catch
(e)
{
alert(e);
}
}
//
创建XMLHTTP对象
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;
}
}
//
刷新数据
function flush()
{
try
{
if
(xmlHttp.readyState
==
4
||
xmlHttp.readyState
==
"
complete
"
)
{
var xmlDoc
=
new
ActiveXObject(
"
Microsoft.XMLDOM
"
);
xmlDoc.async
=
false
;
xmlDoc.loadXML(xmlHttp.responseText)
//
返回错误代码
//
var error = xmlDoc.parseError.errorCode;
//
alert(error?xmlDoc.parseError.reason:"XML格式正确");
var users
=
xmlDoc.getElementsByTagName(
"
user
"
);
clearTable(userTable);
for
(var i
=
0
;i
<
users.length;i
++
)
{
var userRow
=
userTable.insertRow();
var rowId
=
userRow.rowIndex;
var user
=
users[i];
var userId
=
userRow.insertCell();
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();
var deleteUrl
=
"
user!delete.action?user.userId=
"
+
user.getAttribute(
"
userId
"
);
userOp.innerHTML
=
"
<a href=javascript:deleteRowId=
"
+
rowId
+
"
;showHint('
"
+
deleteUrl
+
"
',drop);>删除</a>
"
;
}
}
}
catch
(e)
{
alert(e.description);
}
}
//
删除数据
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
{
userTable.deleteRow(deleteRowId);
alert(msg.getAttribute(
"
msgString
"
));
}
}
}
//
清空表数据
function clearTable(opTable)
{
var size
=
opTable.rows.length;
for
(var i
=
2
;i
<
size;i
++
)
{
opTable.deleteRow(
2
);
}
}
</
script
>
<
body
>
<
center
>
<
h3
>
用户列表
</
h3
>
<
br
>
<
table id
=
"
userTable
"
title
=
"
用户列表
"
width
=
"
50%
"
>
<
tbody
>
<
tr bgcolor
=
"
#54821f
"
>
<
td width
=
"
15%
"
>
ID
</
td
>
<
td width
=
"
15%
"
>
姓名
</
td
>
<
td width
=
"
20%
"
>
电话
</
td
>
<
td width
=
"
5%
"
>
操作
</
td
>
<
tr
>
</
tbody
>
</
table
>
<
br
>
<
br
>
<
br
>
<
button onclick
=
"
showHint('user!list.action',flush);
"
>
刷新
</
button
>
</
center
>
</
body
>
</
html
>
user.java
package
com.wen.test;
public
class
User
{
private
String userId;
private
String userName;
private
String userTel;
public
String getUserId()
{
return
userId;
}
public
void
setUserId(String userId)
{
this
.userId
=
userId;
}
public
String getUserName()
{
return
userName;
}
public
void
setUserName(String userName)
{
this
.userName
=
userName;
}
public
String getUserTel()
{
return
userTel;
}
public
void
setUserTel(String userTel)
{
this
.userTel
=
userTel;
}
}
UserAction.java
package
com.wen.test;
import
java.util.List;
import
java.util.Vector;
import
com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings(
"
serial
"
)
public
class
UserAction
extends
ActionSupport
{
private
User user;
private
List
<
User
>
userList;
private
List
<
String
>
msgList;
public
String flush()
{
return
SUCCESS;
}
public
String delete()
{
int
id
=
Integer.parseInt(user.getUserId());
msgList
=
new
Vector
<
String
>
();
if
(id
<
0
||
id
>
3
)
{
msgList.add(
"
false
"
);
msgList.add(
"
删除ID为:
"
+
id
+
"
用户失败!!
"
);
}
else
{
//
做删除操作
msgList.add(
"
true
"
);
msgList.add(
"
删除ID为:
"
+
id
+
"
用户成功!!
"
);
}
return
SUCCESS;
}
public
String list()
{
userList
=
new
Vector
<
User
>
();
user
=
new
User();
user.setUserId(
"
0
"
);
user.setUserName(
"
wen
"
);
user.setUserTel(
"
029-82507114
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
1
"
);
user.setUserName(
"
peng
"
);
user.setUserTel(
"
029-34650060
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
2
"
);
user.setUserName(
"
tao
"
);
user.setUserTel(
"
13570854091
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
2
"
);
user.setUserName(
"
tao
"
);
user.setUserTel(
"
13570854091
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
2
"
);
user.setUserName(
"
tao
"
);
user.setUserTel(
"
13570854091
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
2
"
);
user.setUserName(
"
tao
"
);
user.setUserTel(
"
13570854091
"
);
userList.add(user);
user
=
new
User();
user.setUserId(
"
2
"
);
user.setUserName(
"
tao
"
);
user.setUserTel(
"
13570854091
"
);
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;
}
}
struts.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"
>
<
struts
>
<
constant
name
="struts.enable.DynamicMethodInvocation"
value
="true"
/>
<
constant
name
="struts.devMode"
value
="true"
/>
<
package
name
="users"
extends
="struts-default"
>
<
result-types
>
<
result-type
name
="userInfo"
class
="com.wen.test.User"
/>
<
result-type
name
="userList"
class
="java.util.List"
/>
<
result-type
name
="msgList"
class
="java.util.List"
/>
</
result-types
>
<
action
name
="user"
class
="com.wen.test.UserAction"
>
<
result
>
/result.jsp
</
result
>
</
action
>
</
package
>
</
struts
>
END
希望对初学着有所帮助,欢迎大家一起探讨java 问题!!
posted on 2007-08-15 13:05
月月鸟
阅读(1813)
评论(9)
编辑
收藏
所属分类:
ajax
FeedBack:
#
re: struts 2.0 + 原始 AJAX + XML
2007-08-15 17:18 |
编程、设计是职业更是爱好
不错,大道至简。对于WEB开发,滥用的Tag是灾难。
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML
2009-02-12 23:09 |
继文
上面的楼主:你上面的例子能正常测试吗?我怎么得到action中返回的一个页面呢,希望在解释一下。
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML
2011-10-19 12:22 |
ww
最突出的功能自然是调试(Debug),可以对Java代码,JavaScript,JQuery,Ajax等技术进行调试。 其他编辑功能抛开不看,这点远胜Eclipse。 首先查看Map类型的对象,如果实现类采用的是哈希映射,则会自动过滤空的Entry实例。 不像Eclipse,只能在默认的toString()方法中寻找你所要的key。 其次,需要动态Evaluate一个表达式的值,比如我得到了一个类的实例,但是并不知晓它的API,可以通过Code Completion点出它所支持的方法,这点Eclipse无法比拟。 最后,在多线程调试的情况下,Log on console的功能可以帮你检查多线程执行的情况。 前面已经说过了IDEA所提倡的是智能编码,是减少程序员的工作,那么IDEA具体又有哪些值得推崇呢?总结以下25点,希望能有个比较全面的介绍。 1. 智能的选取。在很多时候我们要选取某个方法,或某个循环或想一步一步从一个变量到整个类慢慢扩充着选取,IDEA就提供这种基于语法的选择,在默认设置中Ctrl+w,可以实现选取范围的不断扩充,这种方式在重构的时候尤其显得方便。 2. 丰富的导航模式。IDEA提供了丰富的导航查看模式,例如ctrl+e显示最近打开过的文件,ctrl+n显示你希望显示的类名查找框 (该框同样有智能补充功能,当你输入字母后IDEA将显示所有候选类名)。在最基本的project试图中,你还可以选择多种的试图方式。 3. 历史记录功能。不用通过版本管理服务器,单纯的IDEA就可以查看任何工程中文件的历史记录,但版本恢复时你可以很容易的将其恢复。 4. JUnit的完美支持。 5. 对重构的优越支持。IDEA是所有IDE中最早支持重构的,其优秀的重构能力一直是其主要卖点之一。 6. 编码辅助。java规范中提倡的tostring(),hashcode(),equals(),以及所有的get/set方法,你可以不用进行任何的输入就可以实现代码的自动生成,从而把你从无聊的基本方法编码中解放出来。 7. 灵活的排版功能。基本所有的IDE都有重排版功能,但仅有IDEA的是人性的,因为她支持排版模式的定制,你可以根据不同的项目要求采用不同的排版方式。 8. XML的完美支持。 9. 简洁易用的GUI界面。 10. 与文件系统自动同步。当你最小化IDEA,直接对文件进行编辑之后,重新打开IDEA后IDEA将自动的完成文件的更新,而不用重新导入工程或刷新工程。 11. 自定义的快捷键。强大的快捷键设置,基本可以让程序员离开鼠标工作。 12. 动态语法检测。任何不符合java规范,自己预定义的规范,累赘都将在页面中加亮显示。 13. 代码检查。对代码进行自动分析,检测不符合规范的,存在风险的代码,并加亮显示。 14. 对JSP的完全支持。不需要任何的插件,完全支持JSP。 15. 智能编辑。代码输入过程中,自动补充方法或类。 16. EJB支持。不需要任何插件完全支持EJB(6.0 支持ejb3.0) 17. 列编辑模式。用过UtralEdit的肯定对其的列编辑模式赞赏不已,因为她减少了很多很多的无聊重复工作,而IDEA完全支持该模式,从而更加提高了编码效率。 18. 智能模板。预置模板可以让你把经常用到的方法编辑进模板,使用时你只用输入简单的几个字母就可以完成全部代码的编写。例如使用比较高的public static void main(String[] args){}你可以在模板中预设pm为该方法,输入时你只要输入pm再按代码辅助键,IDEA将完成代码的自动输入。 19. 完美的自动代码完成。智能检查类中方法,当发现方法名只有一个时自动完成代码输入,从而减少剩下代码的编写工作。 20. Ant 支持。不需要任何的第三方插件。 21. 不使用代码检查。自动检查代码中不使用的代码,并给出提示,从而使代码更高效。 22. 智能代码。自动检查代码,发现与预置规范有出入的代码给出提示,若程序员同意修改自动完成修改。例如代码:String str = "Hello Intellij " + "IDEA"; IDEA将给出优化提示,若程序员同意修改IDEA将自动将代码修改为:String str = "Hello Intellij IDEA"; 23. 正则表达的查找和替换功能。查找替代支持正则表达,从而提高效率。 24. JavaDoc预览支持。支持JavaDoc的预览功能,在JavaDoc代码中ctrl+q显示JavaDoc的结果,从而提高doc文档的质量。 25. 程序员意图支持。当程序员编码时IDEA时时检测你的意图,或提供建议,或直接帮你完成代码。
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML[未登录]
2011-10-27 17:46 |
pp
http://www.aqee.net/docs/draw-a-stickman/
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML[未登录]
2011-11-02 10:55 |
pp
2011-9-29 2
2011-10-10 0.5
2011-10-11 0.5
2011-10-12 2
2011-10-13 0.5
2011-10-17 0.5
2011-10-18 1
2011-10-19 3
2011-10-20 1
2011-10-23 12
2011-10-24 0.5
2011-10-25 1
2011-10-29 7.5
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML[未登录]
2011-11-03 09:19 |
qq
2011/10/12 2
2011/10/17 0.5
2011/10/18 1
2011/10/19 0.5
2011/10/20 1
2011/10/23 11
2011/10/25 1
2011/10/29 7.5
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML
2012-02-18 08:22 |
月月鸟
http://blog.csdn.net/ocelight/article/details/4510192
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML
2012-02-18 08:26 |
月月鸟
http://topic.csdn.net/u/20110113/10/801168dd-a390-40cb-b381-53021e3d4e4e.html?26658
回复
更多评论
#
re: struts 2.0 + 原始 AJAX + XML[未登录]
2013-05-30 11:05 |
bb
http://blog.csdn.net/lihongzhai/article/details/2074031
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
相关文章:
struts2.0 + ajax + xml (附源码)
struts 2.0 + 原始 AJAX + XML
<
2011年10月
>
日
一
二
三
四
五
六
25
26
27
28
29
30
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
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(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---企业应用的开源构件库
搜索
积分与排名
积分 - 115777
排名 - 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)