Struts2+JQuery+JSON實作異步互動,包括從背景獲得單個值、對象、List和Map資料并從前台的表達中擷取值把值進行序列化通過JQuery的$.ajax({})傳到背景和背景的對象進行綁定。
第一步:在MyEclipse中建立JavaWeb工廠并把Struts2 和 json的jar包添加到工程中添加完成後的工程圖是:
第二步:建立背景:
1. UserInfo實體類:
package struts2jsonjquery.test.entity;
import java.io.Serializable;
/**
* <p>
* 使用者實體類
* </p>
* @author 朱延偉
*
*/
public class UserInfo implements Serializable {
private static final long serialVersionUID = 3952189513312630860L;
private int userId;
private String userName;
private String password;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
public String getUserName() {
return userName;
public void setUserName(String userName) {
this.userName = userName;
public String getPassword() {
return password;
public void setPassword(String password) {
this.password = password;
}
package struts2jsonjquery.test.entity;
import java.io.Serializable;
/**
* <p>
* 使用者實體類
* </p>
* @author 朱延偉
*
*/
public class UserInfo implements Serializable {
private static final long serialVersionUID = 3952189513312630860L;
private int userId;
private String userName;
private String password;
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
public String getUserName() {
return userName;
public void setUserName(String userName) {
this.userName = userName;
public String getPassword() {
return password;
public void setPassword(String password) {
this.password = password;
2. Action類
package struts2jsonjquery.test.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import struts2jsonjquery.test.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;
public class JsonJqueryStruts2Action extends ActionSupport {
private static final long serialVersionUID = 3518833679938898354L;
private String message; //使用json傳回單個值
private UserInfo userInfo; //使用json傳回對象
private List<UserInfo> userInfosList; //使用josn傳回List對象
private Map<String,UserInfo> userInfosMap; //使用json傳回Map對象
//為上面的的屬性提供get,Set方法
public String getMessage() {
return message;
public void setMessage(String message) {
this.message = message;
public UserInfo getUserInfo() {
return userInfo;
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
public List<UserInfo> getUserInfosList() {
return userInfosList;
public void setUserInfosList(List<UserInfo> userInfosList) {
this.userInfosList = userInfosList;
public Map<String, UserInfo> getUserInfosMap() {
return userInfosMap;
public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {
this.userInfosMap = userInfosMap;
/**
* <p>
* 傳回單個值
* @return
*/
public String returnMessage(){
this.message = "成功傳回單個值";
return "message";
* 傳回UserInfo對象
* </p>
public String returnUserInfo(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("張三");
userInfo.setPassword("000000");
return "userInfo";
* 傳回List對象
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("張三");
u1.setPassword("000000");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("111111");
UserInfo u3 = new UserInfo();
u3.setUserId(10002);
u3.setUserName("王五");
u3.setPassword("222222");
UserInfo u4 = new UserInfo();
u4.setUserId(10003);
u4.setUserName("趙六");
u4.setPassword("333333");
userInfosList.add(u1);
userInfosList.add(u2);
userInfosList.add(u3);
userInfosList.add(u4);
return "list";
* 傳回Map對象
public String returnMap(){
userInfosMap = new HashMap<String,UserInfo>();
userInfosMap.put(u1.getUserId()+"", u1);
userInfosMap.put(u2.getUserId()+"", u2);
userInfosMap.put(u3.getUserId()+"", u3);
userInfosMap.put(u4.getUserId()+"", u4);
return "map";
* 獲得對象,也就是通過表達獲得對象(異步的)
* </P>
public String gainUserInfo(){
System.out.println("使用者ID:"+userInfo.getUserId());
System.out.println("使用者名:"+userInfo.getUserName());
System.out.println("密碼:"+userInfo.getPassword());
* 獲得單個值就不用寫了和平常一樣
package struts2jsonjquery.test.action;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import struts2jsonjquery.test.entity.UserInfo;
import com.opensymphony.xwork2.ActionSupport;
public class JsonJqueryStruts2Action extends ActionSupport {
private static final long serialVersionUID = 3518833679938898354L;
private String message; //使用json傳回單個值
private UserInfo userInfo; //使用json傳回對象
private List<UserInfo> userInfosList; //使用josn傳回List對象
private Map<String,UserInfo> userInfosMap; //使用json傳回Map對象
//為上面的的屬性提供get,Set方法
public String getMessage() {
return message;
public void setMessage(String message) {
this.message = message;
public UserInfo getUserInfo() {
return userInfo;
public void setUserInfo(UserInfo userInfo) {
this.userInfo = userInfo;
public List<UserInfo> getUserInfosList() {
return userInfosList;
public void setUserInfosList(List<UserInfo> userInfosList) {
this.userInfosList = userInfosList;
public Map<String, UserInfo> getUserInfosMap() {
return userInfosMap;
public void setUserInfosMap(Map<String, UserInfo> userInfosMap) {
this.userInfosMap = userInfosMap;
/**
* <p>
* 傳回單個值
* @return
*/
public String returnMessage(){
this.message = "成功傳回單個值";
return "message";
* 傳回UserInfo對象
* </p>
public String returnUserInfo(){
userInfo = new UserInfo();
userInfo.setUserId(10000);
userInfo.setUserName("張三");
userInfo.setPassword("000000");
return "userInfo";
* 傳回List對象
public String returnList(){
userInfosList = new ArrayList<UserInfo>();
UserInfo u1 = new UserInfo();
u1.setUserId(10000);
u1.setUserName("張三");
u1.setPassword("000000");
UserInfo u2 = new UserInfo();
u2.setUserId(10001);
u2.setUserName("李四");
u2.setPassword("111111");
UserInfo u3 = new UserInfo();
u3.setUserId(10002);
u3.setUserName("王五");
u3.setPassword("222222");
UserInfo u4 = new UserInfo();
u4.setUserId(10003);
u4.setUserName("趙六");
u4.setPassword("333333");
userInfosList.add(u1);
userInfosList.add(u2);
userInfosList.add(u3);
userInfosList.add(u4);
return "list";
* 傳回Map對象
public String returnMap(){
userInfosMap = new HashMap<String,UserInfo>();
userInfosMap.put(u1.getUserId()+"", u1);
userInfosMap.put(u2.getUserId()+"", u2);
userInfosMap.put(u3.getUserId()+"", u3);
userInfosMap.put(u4.getUserId()+"", u4);
return "map";
* 獲得對象,也就是通過表達獲得對象(異步的)
* </P>
public String gainUserInfo(){
System.out.println("使用者ID:"+userInfo.getUserId());
System.out.println("使用者名:"+userInfo.getUserName());
System.out.println("密碼:"+userInfo.getPassword());
* 獲得單個值就不用寫了和平常一樣
3. 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>
<package name="default" namespace="/" extends="json-default">
<action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">
<!-- 傳回單個值的result -->
<result name="message" type="json"></result>
<!-- 傳回UserInfo對象的 -->
<result name="userInfo" type="json"></result>
<!-- 傳回List對象的 -->
<result name="list" type="json"></result>
<!-- 傳回Map對象的 -->
<result name="map" type="json"></result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="default" namespace="/" extends="json-default">
<action name="jsontest" class="struts2jsonjquery.test.action.JsonJqueryStruts2Action">
<!-- 傳回單個值的result -->
<result name="message" type="json"></result>
<!-- 傳回UserInfo對象的 -->
<result name="userInfo" type="json"></result>
<!-- 傳回List對象的 -->
<result name="list" type="json"></result>
<!-- 傳回Map對象的 -->
<result name="map" type="json"></result>
</action>
</package>
前台:
1. index.jsp
<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Struts2+JQuery+JSON</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<script type="text/javascript" src="<%=path %>/js/jquery.js"></script>
<script type="text/javascript" src="<%=path %>/js/json.js"></script>
</head>
<body>
<input id="getMessage" type="button" value="擷取單個值"/>&nbsp;&nbsp;
<input id="getUserInfo" type="button" value="擷取UserInfo對象"/>&nbsp;&nbsp;
<input id="getList" type="button" value="擷取List對象"/>&nbsp;&nbsp;
<input id="getMap" type="button" value="擷取Map對象"/>&nbsp;&nbsp;
<br>
<!-- 要顯示資訊的層 -->
<div id="message"></div>
<form>
使用者ID:<input name="userInfo.userId" type="text"/><br/>
使用者名:<input name="userInfo.userName" type="text"/><br/>
密&nbsp;&nbsp;&nbsp;碼:<input name="userInfo.password" type="text"/><br>
<input id="regRe" type="button" value="注冊"/>
</form>
</body>
</html>
<%
String path = request.getContextPath();
<meta http-equiv="expires" content="0">
<input id="getMessage" type="button" value="擷取單個值"/>&nbsp;&nbsp;
<input id="getUserInfo" type="button" value="擷取UserInfo對象"/>&nbsp;&nbsp;
<input id="getList" type="button" value="擷取List對象"/>&nbsp;&nbsp;
<input id="getMap" type="button" value="擷取Map對象"/>&nbsp;&nbsp;
2. json.js
//初始加載頁面時
$(document).ready(function(){
//為擷取單個值的按鈕注冊滑鼠單擊事件
$("#getMessage").click(function(){
$.getJSON("jsontest!returnMessage.action",function(data){
//通過.操作符可以從data.message中獲得Action中message的值
$("#message").html("<font color='red'>"+data.message+"</font>");
});
});
//為擷取UserInfo對象按鈕添加滑鼠單擊事件
$("#getUserInfo").click(function(){
$.getJSON("jsontest!returnUserInfo.action",function(data){
//清空顯示層中的資料
$("#message").html("");
//為顯示層添加擷取到的資料
//擷取對象的資料用data.userInfo.屬性
$("#message").append("<div><font color='red'>使用者ID:"+data.userInfo.userId+"</font></div>")
.append("<div><font color='red'>使用者名:"+data.userInfo.userName+"</font></div>")
.append("<div><font color='red'>密碼:"+data.userInfo.password+"</font></div>")
//為擷取List對象按鈕添加滑鼠單擊事件
$("#getList").click(function(){
$.getJSON("jsontest!returnList.action",function(data){
//使用jQuery中的each(data,function(){});函數
//從data.userInfosList擷取UserInfo對象放入value之中
$.each(data.userInfosList,function(i,value){
$("#message").append("<div>第"+(i+1)+"個使用者:</div>")
.append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")
.append("<div><font color='red'>使用者名:"+value.userName+"</font></div>")
.append("<div><font color='red'>密碼:"+value.password+"</font></div>");
});
//為擷取Map對象按鈕添加滑鼠單擊事件
$("#getMap").click(function(){
$.getJSON("jsontest!returnMap.action",function(data){
//key值為Map的鍵值
$.each(data.userInfosMap,function(key,value){
$("#message").append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")
//向伺服器發送表達資料
$("#regRe").click(function(){
//把表單的資料進行序列化
var params = $("form").serialize();
//使用jQuery中的$.ajax({});Ajax方法
$.ajax({
url:"jsontest!gainUserInfo.action",
type:"POST",
data:params,
dataType:"json",
success:function(data){
//清空顯示層中的資料
}
});
//初始加載頁面時
$(document).ready(function(){
//為擷取單個值的按鈕注冊滑鼠單擊事件
$("#getMessage").click(function(){
$.getJSON("jsontest!returnMessage.action",function(data){
//通過.操作符可以從data.message中獲得Action中message的值
$("#message").html("<font color='red'>"+data.message+"</font>");
});
});
//為擷取UserInfo對象按鈕添加滑鼠單擊事件
$("#getUserInfo").click(function(){
$.getJSON("jsontest!returnUserInfo.action",function(data){
//清空顯示層中的資料
$("#message").html("");
//為顯示層添加擷取到的資料
//擷取對象的資料用data.userInfo.屬性
$("#message").append("<div><font color='red'>使用者ID:"+data.userInfo.userId+"</font></div>")
.append("<div><font color='red'>使用者名:"+data.userInfo.userName+"</font></div>")
.append("<div><font color='red'>密碼:"+data.userInfo.password+"</font></div>")
//為擷取List對象按鈕添加滑鼠單擊事件
$("#getList").click(function(){
$.getJSON("jsontest!returnList.action",function(data){
//使用jQuery中的each(data,function(){});函數
//從data.userInfosList擷取UserInfo對象放入value之中
$.each(data.userInfosList,function(i,value){
$("#message").append("<div>第"+(i+1)+"個使用者:</div>")
.append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")
.append("<div><font color='red'>使用者名:"+value.userName+"</font></div>")
.append("<div><font color='red'>密碼:"+value.password+"</font></div>");
});
//為擷取Map對象按鈕添加滑鼠單擊事件
$("#getMap").click(function(){
$.getJSON("jsontest!returnMap.action",function(data){
//key值為Map的鍵值
$.each(data.userInfosMap,function(key,value){
$("#message").append("<div><font color='red'>使用者ID:"+value.userId+"</font></div>")
//向伺服器發送表達資料
$("#regRe").click(function(){
//把表單的資料進行序列化
var params = $("form").serialize();
//使用jQuery中的$.ajax({});Ajax方法
$.ajax({
url:"jsontest!gainUserInfo.action",
type:"POST",
data:params,
dataType:"json",
success:function(data){
//清空顯示層中的資料
}
注意:JSON插件會把所有包含getter方法的屬性都序列化到傳回結果中,是以Action中的其他execute方法都不要把名
字加get字首。
可以下載下傳工程檔案
下載下傳次數: 1853