struts2 and ajax --使用dojo和div -凯发k8网页登录

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  凯发k8网页登录-凯发天生赢家一触即发官网 :: 凯发k8网页登录首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

struts2 and ajax --使用dojo和div

posted on 2008-02-10 20:56 云自无心水自闲 阅读(12169) 评论(8)     所属分类: java心得体会struts2ajaxdojo

struts2和struts相比,一个重大改进就是支持ajax。 本文主要看一下struts2中的div是如何用来输出ajax结果,其中主要使用了dojo。

首先,我们先创建一个简单的用例,在这个用例中,将在屏幕上显示一个用户列表,点击列表中的userid时,列表的下方将显示用户的详细信息,显示用户详细信息的这个步骤我们将使用ajax。

一、创建web.xml

xml version="1.0" encoding="utf-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  
<filter>
    
<filter-name>struts2filter-name>
    
<filter-class>org.apache.struts2.dispatcher.filterdispatcherfilter-class>
  
filter>
  
<filter-mapping>
    
<filter-name>struts2filter-name>
    
<url-pattern>/*url-pattern>
  
filter-mapping>
web-app>

二、创建struts.xml
doctype struts public
    "-//apache software foundation//dtd struts configuration 2.0//en"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
<struts>
    
<package name="ajaxdemo" extends="struts-default">
        
<action name="userlistingaction" class="ajaxdemo.action.userlistingaction">
            
<result>/userlisting.jspresult>
        
action>
        
<action name="userdetailaction" class="ajaxdemo.action.userdetailaction">
            
<result>/userdetail.jspresult>
        
action>
    
package> 
struts>

三、页面:userlisting.jsp
displays list of users
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  
<head>
    
<s:head theme="ajax"/>
    
  
head>
  
<script>
    function show_user_details(id) {
      document.frm_user.userid.value = id;
      dojo.event.topic.publish("show_detail");
    }
  
script>
  
<body>
    
<s:form id="frm_user" name="frm_user">
      
<h1>user listingh1>
      
<s:if test="userlist.size > 0">
        
<table border="1">
          
<s:iterator value="userlist">
            
<tr>
              
<td>
                
<s:a href="#" onclick="javascript:show_user_details('%{id}');return false;"><s:property value="id" />s:a>
              
td>
              
<td>
                
<s:property value="name" />
              
td>
            
tr>
          
s:iterator>
        
table>
      
s:if> 
      
<s:hidden name="userid"/>
      
<s:url id="d_url" action="userdetailaction" />
      
<s:div  id="user_details" href="%{d_url}" theme="ajax" listentopics="show_detail" formid="frm_user" >
      
s:div>
    
s:form>
  
body>
html>


四、页面:userdetail.jsp,用于显示用户详细信息,由userlisting.jsp加载
<%@ taglib prefix="s" uri="/struts-tags" %>
<h1>user detailsh1>
<s:if test="userdetails != null">
    
<table>
      
<tr><td>id:td><td><s:property value="userdetails.id" />td>tr>
      
<tr><td>name:td><td><s:property value="userdetails.name" />td>tr>
      
<tr><td>email:td><td><s:property value="userdetails.email" />td>tr>
      
<tr><td>address:td><td><s:property value="userdetails.address" />td>tr>
    
table>
s:if>

五、ajaxdemo.action.userlistingaction.java,生成用户列表数据,交由userlisting.jsp显示,在实际的应用中,这部分的数据一般是从数据库中取得的。
package ajaxdemo.action;

import ajaxdemo.dto.userlistdto;
import com.opensymphony.xwork2.actionsupport;
import java.util.arraylist;
import java.util.list;

/** populates the user listing data */
public class userlistingaction extends actionsupport {

    
private list<userlistdto> userlist; // this is available in view automatically!
    public string execute() throws exception {
        
        
// create 2 user objects and add to a list
        setuserlist((list<userlistdto>new arraylist());
        userlistdto user 
= new userlistdto();
        user.setid(
"gjose");
        user.setname(
"grace joseph");
        getuserlist().add(user);
        
        user 
= new userlistdto();
        user.setid(
"peter");
        user.setname(
"petersmith");
        getuserlist().add(user);
        
return success;
    }


    
public list<userlistdto> getuserlist() {
        
return userlist;
    }


    
public void setuserlist(list<userlistdto> userlist) {
        
this.userlist = userlist;
    }

}

六、ajaxdemo.action.userdetailaction.java,当userid被选中时,取得用户详细数据,通过dojo来调用。
package ajaxdemo.action;

import ajaxdemo.dto.userdetaildto;
import com.opensymphony.xwork2.actionsupport;

/* populates user details for a user id selected */
public class userdetailaction extends actionsupport {
    
    
private string userid;
    
private userdetaildto userdetails;
    
    
public string execute() throws exception {
        
// populate only when userid is selected
        if(userid!=null && !userid.equals(""))
            populatedetail(userid);
        
return success;
    }

    
    
private void populatedetail(string id) {
        userdetails 
= new userdetaildto();
        userdetails.setid(id);
        userdetails.setname(
"the complete name");
        userdetails.setemail(
"admin@struts2.org");
        userdetails.setaddress(
"rich street, lavish road, struts land");
    }


    
public string getuserid() {
        
return userid;
    }


    
public void setuserid(string userid) {
        
this.userid = userid;
    }


    
public userdetaildto getuserdetails() {
        
return userdetails;
    }


    
public void setuserdetails(userdetaildto userdetails) {
        
this.userdetails = userdetails;
    }


}


七、ajaxdemo.action.userdetaildto.java、pojo,用于封装用户信息
package ajaxdemo.dto;

public class userdetaildto {

    
private string id;
    
private string name;
    
private string email;
    
private string address;

    
public string getid() {
        
return id;
    }


    
public void setid(string id) {
        
this.id = id;
    }


    
public string getname() {
        
return name;
    }


    
public void setname(string name) {
        
this.name = name;
    }


    
public string getemail() {
        
return email;
    }


    
public void setemail(string email) {
        
this.email = email;
    }


    
public string getaddress() {
        
return address;
    }


    
public void setaddress(string address) {
        
this.address = address;
    }

}

ok,部署完毕后,输入http://localhost:8080/ajaxdemo/userlistingaction.action来测试一下。
当列表中的userid被点中后,javascript通知div标签从url中动态加载返回内容。这个例子中,userdetailaction取得用户信息并传递给userdetail.jsp。userdetail.jsp生成最终的展示结果,显示在div中。


评论

# re: struts2 and ajax --使用dojo和div  回复     

2008-02-27 16:13 by
大哥:
下次翻译的时候能不能给个连接。


# re: struts2 and ajax --使用dojo和div[未登录]  回复     

2009-02-06 16:09 by
哈哈,楼上的太有才了

# re: struts2 and ajax --使用dojo和div  回复     

2009-02-09 19:55 by
即使是翻译的也不错,顶博主。

# re: struts2 and ajax --使用dojo和div  回复     

2009-04-04 18:48 by
是不是少了个ajaxdemo.dto.userlistdto。java啊?

# re: struts2 and ajax --使用dojo和div[未登录]  回复     

2009-05-17 04:14 by
package ajaxdemo.dto;

public class userlistdto {
private string id;
private string name;
private string email;
private string address;
public string getid() {
return id;
}
public void setid(string id) {
this.id = id;
}
public string getname() {
return name;
}
public void setname(string name) {
this.name = name;
}
public string getemail() {
return email;
}
public void setemail(string email) {
this.email = email;
}
public string getaddress() {
return address;
}
public void setaddress(string address) {
this.address = address;
}
}

# re: struts2 and ajax --使用dojo和div  回复     

2009-06-17 01:55 by
2楼的仁兄真逗..谢谢你.给了原装的,使我对这个例子又恢复了信心.哈哈...

# re: struts2 and ajax --使用dojo和div[未登录]  回复     

2010-01-06 15:21 by
按照楼主提供的源码,在ide中运行了,在detailaction处理的时候一直得不到从list页面传递过来的id值,导致不能显示用户的详细信息。不知道是我拷贝时候出了问题还是代码原本有问题!
最后通过request获取list页面的id值得以解决。

# re: struts2 and ajax --使用dojo和div  回复     

2010-07-19 11:44 by
用不了啊。

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


网站导航:
              
 
网站地图