posts - 8,  comments - 174,  trackbacks - 0
实现逻辑:

     实现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 月月鸟 阅读(1788) 评论(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[未登录]
# 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
# re: struts 2.0 + 原始 AJAX + XML[未登录]

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年8月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用链接

留言簿(5)

随笔分类(8)

随笔档案(8)

文章分类(1)

文章档案(1)

其他

娱乐

技术

搜索

  •  

积分与排名

  • 积分 - 115294
  • 排名 - 503

最新随笔

最新评论

评论排行榜