2013-10-24 15 views
6

jQuery'den struts2 action sınıfına veri gönderirken sorun yaşıyorum. Şu soruyu gördüm: JSON Jquery to Struts2 action Ama çözümü çok iyi anlamıyorum. Ben Struts2 eylem sınıfına json verilerini göndermek istediğinizJQuery, JSON verilerini Struts2 Action sınıfına göndermek için nasıl kullanılır

[{"id":"1","code":"111","name":"ddd"}, 
{"id":"2","code":"222","name":"sss"}, 
{"id":"3","code":"333","name":"eee"}] 

:

json dizi şu şekildedir:

İşte benim sorundur. jQuery kodu şu şekildedir:

var data = JSON.stringify(dataObj); 
$.ajax({ 
    url: "Update", 
    type: "post", 
    data: data, 
    dataType: 'json', 
    contentType:"application/json;charset=utf-8", 
    success : function(){ 
    alert("You made it!"); 
    } 
}); 

Ancak Chrome'un Geliştirme Aracı, sunucu tarafındaki gönderilen verileri gördük. Ancak sunucu tarafında json verilerini nasıl alacağımı bilmiyorum.

Eylem: Bu şekilde

public class Update extends ActionSupport{ 
    private String data; 

    public String getData(){ 
     return data; 
    } 

    public void setData(String data){ 
     this.data= data; 
    } 

    public String execute(){ 
     System.out.println(data); 
     return SUCCESS; 
    } 
} 

, data boş.

Ayrıca JSON verilerini almak için bir List kullanmayı denedim. "Data" türünü String'den List<Node> olarak değiştirerek tekrar başarısız oldu. Muhtemelen Struts2'nin kullandığı OGNL modelini tam olarak anlamadığım için.

Lütfen Yardım Bana. Çok teşekkür ederim!

+0

JSON eklenti kullanıyor musunuz? –

+0

Evet, ancak eklentiye aşina değilim. –

cevap

8
{"id":"1","code":"111","name":"ddd"} 

Adım 1: Oluşturma/birikir yukarıdaki alanları

class MyBean{ 
    String id,code,name; 
    //getters & setters 
} 

Adım 2 kapsülleyen bir fasulye/pojo: MyBeans bir listesini almak için eylem kodunu değiştirin

public class Update extends ActionSupport{ 
    private List<MyBean> data; 

    //other code, getters & setters 
} 

Adım 3: JSON verilerini serileştirmek ve eylemi tamamlamak için eyleminizi yapılandırın. alanlar (kullanarak json-eklentisi)

<action name="Update" class="Update"> 
     <interceptor-ref name="defaultStack"/> 
     <interceptor-ref name="json"> 
      <param name="enableSMD">true</param> 
     </interceptor-ref> 
</action> 

Adım 4: ajax isteği gövdesine gerekli değişiklikleri yapın Yukarıdaki kod denenmemiş olan aksiyon parametreler/alanları

var data = JSON.stringify(dataObj); 
$.ajax({ 
    url: "Update", 
    type: "post", 
    data: "data:"+data, 
    dataType: 'json', 
    contentType:"application/json;charset=utf-8", 
    success : function(){ 
    alert("You made it!"); 
    } 
}); 

maç gönderiliyor .

+1

Aslında önerileriniz çalışıyor! Ama başka bir problemle karşılaşıyorum. JSON interceptor'a veri gönderebilirim. Ancak, engelleyici benim girişimin iyi biçimlendirilmemiş JSON (geçersiz char d) olmadığını söyleyerek istisna atar. JSON interceptor'unun JSON nesnesini okuduğunu düşünüyorum. Benim JSON veri ilk kelime "veri" olduğu için, bunu sorun sürecini –

+0

yaşıyor Sonra kök nesneyi belirtmek için yapılandırma dosyasına veri eklemek sanırım. Hala iyi çalışmıyor, "Geçersiz kök ifadesi: 'veri'." Herhangi bir fikir? Çok teşekkür ederim! –

+0

lütfen gönderilmekte olan verileri gönderin. –

1

Hey Sorun, doğrudan nesne dizisini gönderiyor. Bu yüzden Struts2, arayacak olan gizli yöntemi bilmez. Json verilerinizi aşağıdaki gibi değiştirin. O zaman işe yarayacak. setter nesne ile okumak içine o belirleyiciler ve alıcılar ile üye var olduğu

{"data":[{"id":"1","code":"111","name":"ddd"}, 
"id":"2","code":"222","name":"sss"}, 
{"id":"3","code":"333","name":"eee"}]} 

Sonra Rapor bir java sınıfıdır

public void setData(List <Report> data) { 
    System.out.println("Setter Call Flow"); 
    this.data = data; 
} 

id kodu, adını içerir.

İlgili konular