struts2 + ajax,由前台的form提交数据到后台,再根据form所调用返回获取的后台json格式的数据返回到前端,然后前端用jquery对json数据进行解析==》》涉及非文件上传的部分

struts2 + ajax + form 表单提交的处理,如果不是文件上传的部分,就可以直接用ajax来实现,而不是像之前用iframe来仿ajax数据交互的方法。

用Ajax.Request()方法来实现!!

例子:

前台代码:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>使用JSON插件</title>

<script type="text/javascript" src="prototype-1.6.0.3.js"></script>

<script type="text/javascript" src="json2.js"></script>

<script type="text/javascript">

        function gotClick(){
                
                //请求的地址
                var url = 'JSONExample.action';
                
                //将favorite表单域的值转换为请求参数
                var params = Form.serialize('form1');
                
                //创建Ajax.Request对象,对应于发送请求
                var myAjax = new Ajax.Request(
                                url,
                                {
                                        //请求方式:POST
                                        method:'post',
                                        
                                        //请求参数
                                        parameters:params,
                                        
                                        //指定回调函数
                                        onComplete:processResponse,
                                        
                                        //是否异步发送请求
                                        asynchronous:true
                                });
                
        }
        
        
        //作为ajax的回调函数
        function processResponse(request){
                
                //使用JSON对象将服务器响应解析成JSON对象
                var res = JSON.parse(request.responseText);
                
                //遍历JSON对象的每个属性
                for(var propName in res){
                        $("show").innerHTML += propName + " --> " +
                                res[propName] + "<br />";
                }
        }
</script>

</head>
<body>


<form >
        field1:<input type="text" name="field1"  /><br>
        field2:<input type="text" name="field2"  /><br>
        field3:<input type="text" name="field3"  /><br>
        <input type="button" value="提交" onclick="gotClick();" />
</form>

<div ></div>


</body>
</html>

后台代码:

package action;

import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.json.annotations.JSON;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings({ "rawtypes", "serial" })
public class JSONExample extends ActionSupport {

        //模拟处理结果的属性
        private int[] ints = {10,20};
        
        
        private Map map = new HashMap();
        
        private String customName = "顾客";
        
        
        //封装请求参数的三个属性
        private String field1;
        
        //transient修饰的属性不会被序列化
        private transient String field2;
        
        private String field3;
        
        
        
        @SuppressWarnings("unchecked")
        @Override
        public String execute() throws Exception {
                map.put("name", "李刚");
                return SUCCESS;
        }
        
        
        

        public int[] getInts() {
                
                System.out.println("getInts()被调用");
                
                return ints;
        }

        public void setInts(int[] ints) {
                System.out.println("setInts()被调用");
                
                this.ints = ints;
        }

        //使用注释语法来改变该属性序列化后的属性名
        @JSON(name="newName")
        public Map getMap() {
                System.out.println("getMap()被调用");
                
                return map;
        }

        public void setMap(Map map) {
                System.out.println("setMap()被调用");
                
                this.map = map;
        }

        public String getCustomName() {
                System.out.println("getCustomName()被调用");
                
                return customName;
        }

        public void setCustomName(String customName) {
                System.out.println("setCustomName()被调用");
                
                this.customName = customName;
        }

        
        
        
        
        public String getField1() {
                System.out.println("getField1()被调用");
                
                return field1;
        }

        public void setField1(String field1) {
                System.out.println("setField1()被调用");
                
                this.field1 = field1;
        }

        public String getField2() {
                System.out.println("getField2()被调用");
                
                return field2;
        }

        public void setField2(String field2) {
                System.out.println("setField2()被调用");
                
                this.field2 = field2;
        }

//      public String getField3() {
//              return field3;
//      }
//
//      public void setField3(String field3) {
//              this.field3 = field3;
//      }
        
        
        
}

配置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.i18n.encoding" value="UTF-8" />
        
        <package name="json" extends="json-default">
                <action name="JSONExample" class="action.JSONExample">
                        <result type="json"></result>
                </action>
                
                <action name="">
                        <result>.</result>
                </action>
        </package>


</struts>

从而实现ajax的异步数据请求交互。