2011-06-11 16 views
6

पर कस्टम ऑब्जेक्ट्स की एक सरणी पोस्ट करें मैं जावा में स्ट्रैट्स 2 एक्शन में कस्टम ऑब्जेक्ट्स की सरणी कैसे पोस्ट करूं?स्ट्रेट्स 2 एक्शन

उदाहरण के लिए अगर मैं निम्नलिखित जावा वस्तु है:

public class Person { 

    private String name; 
    private String lastName; 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

और निम्नलिखित क्रिया:

public class SavePersons extends ActionSupport { 

    private List<Person> persons; 

    @Override 
    public String execute() throws Exception { 
      // Do something 
     return SUCCESS; 
    } 

    public void setPersons(List<Person> persons) { 
     this.persons = persons; 
    } 

} 

मैं एक HTML के रूप में कुछ इस तरह करना चाहते हैं:

<html> 
<body> 
<form method="POST" action="http://postHere"> 
    <input type="text" name="persons[0].name" value="Name1"/> 
    <input type="text" name="persons[0].lastName" value="LastName1"/> 
    <input type="text" name="persons[1].name" value="Name2"/> 
    <input type="text" name="persons[1].lastName" value="LastName2"/> 
    <input type="submit" /> 
</form> 
</body> 
</html> 

कोई सुझाव?

+2

** Quaternion ** ने आपके प्रश्न का उत्तर दिया है। और आपका प्रश्न ** [टैबुलर इनपुट] से संबंधित है (http://struts.apache.org/2.1.8.1/docs/tabular-inputs.html) ** Struts2 – lschin

उत्तर

8

जो आपने अच्छा देखा है। यदि आप मूल्यों को सेट करते हैं या पोस्ट करते हैं तो यह struts2 में कोई फर्क नहीं पड़ता है।

उसी SavePersons क्लास का उपयोग करके, सिवाय इसके कि मैंने public List<Person> getPersons() विधि जोड़ा। समाधान समाधान करने के लिए यह आवश्यक है।

और अनिवार्य रूप से एक ही रूप का उपयोग करते हुए, सिवाय इसके कि मैं एस 2 टैग का उपयोग करके अपने फॉर्म लिखना पसंद करता हूं, जहां यह समझ में आता है (फ़ॉर्म टैग से कुछ लोगों को डिफ़ॉल्ट एस 2 थीम क्या है, आप वैश्विक रूप से थीम को सरल पर सेट कर सकते हैं, लेबल विशेषता काम करेंगे नहीं, लेकिन आप की तरह समान HTML तत्वों व्यवहार करने के लिए उम्मीद थी यूआई टैग काम करेंगे):

<%@taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Person Form</title> 
    </head> 
    <body> 
     <h1>Person Form</h1> 
     <s:form action="person-test" method="post"> 
      <s:textfield name="persons[0].name" label="fName 1"/> 
      <s:textfield name="persons[0].lastName" label="lName 1"/> 
      <s:textfield name="persons[1].name" label="fName 2"/> 
      <s:textfield name="persons[1].lastName" label="lName 2"/> 
      <s:submit/> 
     </s:form> 
    </body> 
</html> 

ध्यान दें कि विधि = "पोस्ट" की जरूरत नहीं है, यह डिफ़ॉल्ट है।

यहां पृष्ठ डेटा प्रदर्शित करने के लिए उपयोग किया गया पृष्ठ है।

<%@taglib prefix="s" uri="/struts-tags"%> 
<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>JSP Page</title> 
    </head> 
    <body> 
     <h1>List of People</h1> 
     <s:iterator value="persons"> 
      <s:property value="name"/> <s:property value="lastName"/><br/> 
     </s:iterator> 
    </body> 
</html> 

और यह ठीक काम करता है।

+1

उत्तर के लिए धन्यवाद। मेरे मामले में समस्या यह है कि अगर मैं गेटटर "गेटपर्सन" घोषित नहीं करता (क्योंकि मैं बाद में सूची नहीं पढ़ना चाहता), यह काम नहीं करता है और व्यक्तियों की सूची पोस्ट पर कभी नहीं आती है। – Mark

+0

क्या आप फॉर्म बनाने के लिए पुनरावर्तक का उपयोग कर सकते हैं? – manafire

+0

@Quaternion: @Mark इस तथ्य के बारे में सही है कि आपके समाधान के समाधान के लिए 'GetPersons' getter अनिवार्य है। असल में सेटर व्यक्तियों को सेट नहीं करेगा, गेटटर का इस्तेमाल व्यक्तियों की सूची पाने के लिए किया जाएगा और उसके सभी तत्व भरने लगेंगे। असल में, मैंने कल 4 घंटे से अधिक समय बिताया (मेरे सहयोगियों में से 4 के साथ आखिरी वाला) यह पता लगाने की कोशिश कर रहा था कि यह क्यों काम नहीं कर रहा है, आपका जवाब "getPersons केवल पढ़ने के लिए है ..." हमें गुमराह कर रहा था। अंततः इस गेटर को जोड़ने से समस्या हल हो गई है। – ahmehri

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