2013-10-24 5 views
6

मुझे jQuery से struts2 एक्शन क्लास में डेटा भेजने में समस्या है। मैंने सवाल देखा है: JSON Jquery to Struts2 action लेकिन मुझे समाधान अच्छी तरह से समझ में नहीं आता है।JSON डेटा को स्ट्रैट्स 2 पोस्ट करने के लिए jQuery का उपयोग कैसे करें एक्शन क्लास

json सरणी इस तरह है::

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

मैं struts2 कार्रवाई वर्ग के लिए json डेटा भेजना चाहते हैं

यहाँ मेरी समस्या है। jQuery कोड इस तरह है: Chrome की विकास उपकरण में,

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!"); 
    } 
}); 

हालांकि, मैं डेटा सर्वर साइड को प्रस्तुत देखा है। लेकिन सर्वर की तरफ, मुझे नहीं पता कि जेसन डेटा कैसे प्राप्त होता है।

कार्रवाई:

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 रिक्त है।

मैंने JSON डेटा प्राप्त करने के लिए एक सूची का उपयोग करने का भी प्रयास किया है। स्ट्रिंग से List<Node> पर "डेटा" प्रकार बदलना, यह फिर से विफल रहा। शायद क्योंकि मैं OGNL मॉडल को समझ नहीं पा रहा हूं जो Struts2 का उपयोग कर रहा है।

कृपया मेरी मदद करें। आपका बहुत बहुत धन्यवाद!

+0

क्या आप JSON प्लगइन का उपयोग कर रहे हैं? –

+0

हां, लेकिन मैं प्लगइन से परिचित नहीं हूं। –

उत्तर

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

चरण 1: बनाएँ सेम/POJO जमा करने के लिए/ऊपर क्षेत्रों संक्षेप

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

चरण 2: अपनी कार्रवाई कोड बदलें MyBeans की एक सूची प्राप्त करने के लिए

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

    //other code, getters & setters 
} 

चरण 3: जेएसओएन डेटा को डी-सीरियलाइज करने और कार्रवाई को भरने के लिए अपनी कार्रवाई को कॉन्फ़िगर करें क्षेत्र (का उपयोग कर json-प्लगइन)

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

चरण 4: ajax अनुरोध शरीर में आवश्यक परिवर्तन करें कार्रवाई पैरामीटर/क्षेत्रों

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!"); 
    } 
}); 

ऊपर कोड अपरीक्षित है मिलान करने के लिए भेजा जा रहा है ।

+1

असल में आपका सुझाव काम कर रहा है! लेकिन मुझे एक और समस्या आती है। मैं जेएसओएन इंटरसेप्टर को डेटा भेज सकता हूं। लेकिन इंटरसेप्टर अपवाद फेंकता है कि मेरा इनपुट अच्छी तरह से जेएसओएन (अमान्य चार डी) नहीं बनाया गया है। मुझे लगता है कि जेएसओएन इंटरसेप्टर मेरे JSON ऑब्जेक्ट को पढ़ रहा है। चूंकि मेरे JSON डेटा का पहला शब्द "डेटा" है, मुझे लगता है कि इसमें –

+0

समस्या समस्या है और फिर मैं रूट ऑब्जेक्ट निर्दिष्ट करने के लिए कॉन्फ़िगरेशन फ़ाइल में डेटा जोड़ता हूं। यह अभी भी अच्छी तरह से काम नहीं करता है, रिपोर्टिंग "अवैध रूट अभिव्यक्ति: 'डेटा'।" कोई विचार? आपका बहुत बहुत धन्यवाद! –

+0

कृपया भेजे जा रहे सटीक डेटा को पोस्ट करें। –

1

अरे समस्या यह है कि आप सीधे वस्तुओं की सरणी पोस्ट कर रहे हैं। तो Struts2 कॉल करने के लिए whicch विधि नहीं पता है। नीचे अपने जेसन डेटा बदलें। फिर यह काम करेगा। के रूप में यह setters और getters साथ सदस्यों है

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

फिर अंदर सेटर वस्तु के साथ पठित

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

कहाँ की रिपोर्ट जावा वर्ग है आईडी, कोड, नाम है।

संबंधित मुद्दे