使用Ajax post将json Array发送到struts2动作

时间:2013-10-09 11:58:39

标签: jsp jquery arrays struts2-jquery

在我的struts2应用程序中,我要求将pojo列表发送到struts2动作。但无法通过行动获得这种方式。

这是我的JavaScript函数。

function go() {
    var requests = Array();
    var url='testUrl';
      $('.innertable').each(function(index){
         var form= $(this).closest('form');
         if(index!=0)
             {
             var xVal=form.find("#xVal"+index).val();
             }
             else
              {
             var xVal=form.find("#xVal"+index).val();
              } 
         var testPojo = {
                 xVal:xVal
             }
         requests.push(testPojo);
         });
         alert('======='+JSON.stringify(requests));
                      $.ajax({
                        url: url,
                        data: JSON.stringify(requests),
                        contentType: "application/json; charset=utf-8",
                        type: 'POST',
                        success: function(data){
                       //success code
                        },
                        error: function(xhr, status, error) {
                            alert(xhr.responseText);
                             window.location.reload();
                        }
         });

}

我的struts2动作

public String testUrl()
    {
        //here what code i can use to get List of pojo
        return SUCCESS;
    }

当我运行此操作时,我会在警报中获取请求的值:

[{"xVal":"$3,000"},{"xVal":"$5,000"}]

如何在struts2操作中获取此值?

4 个答案:

答案 0 :(得分:1)

最后我解决了这个问题。我在这里分享这可能对其他任何人都有用。

代替使用ajax发送数据这里我发送的数据附加在url的查询字符串中。这是样本。

                       $.ajax({
                        url: url+"?data="+JSON.stringify(requests),
                        contentType: "application/json; charset=utf-8",
                        type: 'POST',
                        success: function(data){
                        //success code
                        },
                        error: function(xhr, status, error) {
                            alert(xhr.responseText);
                            alert('there is some problem in updating data');

                        }
         });

这是行动准则

    public String testUrl()
    {

        String data = request.getParameter("data");

        System.out.println("data is :"+data);
        List<TestPojo> testPojos=new ArrayList<TestPojo>();
        try{
            JSONArray jsonArray1 = new JSONArray(data);
            for (int i = 0; i < jsonArray1.length(); i++) {
                JSONObject jsonObject = jsonArray1.getJSONObject(i);

                TestPojo testPojo = new TestPojo();

                testPojo.setTestField(jsonObject.get("testField").toString());

                testPojos.add(testPojo);    
            }
           //additional code here 

        }catch (Exception e) {
            System.out.println("error");
        }

        return SUCCESS;
    }

答案 1 :(得分:0)

@Ravi Kant首先为什么要将json字符串发送给行动?我的意思是为什么json格式?任何具体原因?您需要通过在Action文件中将请求声明为String变量来接收此请求变量,并使用getter和setter方法从表单中获取值。

private String requests;

public String getRequests() {
    return requests;
}

public void SetRequests(String requests) {
    this.requests = requests;
}

答案 2 :(得分:0)

例如:您可以尝试这种方式

 $.ajax({

        type : 'post',      

        url : 'getsampleZone.action',

        data: "disctric ="+ value,

        dataType: 'json',    

        async: true ,

        success:function(x){

            alert("aasdsds");       

        }                       

});

在行动页面;

    private String disctric;

    System.out.println("disctric >>>>"+getDisctric());

    public String getDisctric() {

    return disctric;

    }

public void setDisctric(String disctric) {
    this.disctric = disctric;
}

答案 3 :(得分:0)

你可以这样使用

&#13;
&#13;
var jsonStr = JSON.stringify(requests);    
                      $.ajax({
                        url: url,
                        data: "jsonAct="+jsonStr ,
                        contentType: "application/json; charset=utf-8",
                        type: 'POST',
                        success: function(data){
                       //success code
                        }
&#13;
&#13;
&#13;

然后为动作类

中的jsonAct生成setter getter
private String jsonAct;




public String getJsonAct() {
    return jsonAct;
}

public void setJsonAct(String jsonAct) {
    this.jsonAct = jsonAct;
}

我遇到了同样的问题并得到了解决。