2012-11-20 17 views
9

में ड्रॉपडाउन मूल्य बाध्यकारी मैं स्प्रिंग एमवीसी के लिए नया हूं। मैं एक ऐप लिख रहा हूं जो स्प्रिंग, स्प्रिंग एमवीसी और जेपीए/हाइबरनेट का उपयोग करता है, मुझे नहीं पता कि स्प्रिंग एमवीसी को एक मॉडल ऑब्जेक्ट में ड्रॉपडाउन से आने वाला मूल्य कैसे सेट किया जाए।स्प्रिंग एमवीसी

Invoice.java

@Entity 
public class Invoice{  
    @Id 
    @GeneratedValue 
    private Integer id; 

    private double amount; 

    @ManyToOne(targetEntity=Customer.class, fetch=FetchType.EAGER) 
    private Customer customer; 

    //Getters and setters 
} 

Customer.java

@Entity 
public class Customer { 
    @Id 
    @GeneratedValue 
    private Integer id; 

    private String name; 
    private String address; 
    private String phoneNumber; 

    //Getters and setters 
} 

invoice.jsp

<form:form method="post" action="add" commandName="invoice"> 
    <form:label path="amount">amount</form:label> 
    <form:input path="amount" /> 
    <form:label path="customer">Customer</form:label> 
    <form:select path="customer" items="${customers}" required="true" itemLabel="name" itemValue="id"/>     
    <input type="submit" value="Add Invoice"/> 
</form:form> 
: मैं यह एक बहुत ही आम परिदृश्य

यहाँ कल्पना कर सकते हैं कोड है

चालानकॉन troller.java

@Controller 
public class InvoiceController { 

    @Autowired 
    private InvoiceService InvoiceService; 

    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String addInvoice(@ModelAttribute("invoice") Invoice invoice, BindingResult result) { 
     invoiceService.addInvoice(invoice); 
     return "invoiceAdded"; 
    } 
} 

InvoiceControler.addInvoice() उत्पन्न होता है, एक चालान उदाहरण एक पैरामीटर के रूप में प्राप्त होता है। चालान की अपेक्षा की गई राशि है, लेकिन ग्राहक आवृत्ति विशेषता शून्य है। ऐसा इसलिए है क्योंकि http पोस्ट ग्राहक आईडी सबमिट करता है और चालान वर्ग ग्राहक ऑब्जेक्ट की अपेक्षा करता है। मुझे नहीं पता कि इसे बदलने का मानक तरीका क्या है।

मैंने स्प्रिंग टाइप रूपांतरण (http://static.springsource.org/spring/docs/current/spring-framework-reference/html/validation.html में) के बारे में Controller.initBinder() के बारे में पढ़ा है, लेकिन मुझे नहीं पता कि यह इस समस्या का समाधान है या नहीं।

कोई विचार?

+3

मैं उसकी जगह काम

उत्तर

7

जैसा कि आपने पहले से ही नोट किया है, वह चाल एक कस्टम कनवर्टर पंजीकृत करना है जो आईडी को ड्रॉप डाउन से कस्टम इंस्टेंस में परिवर्तित कर देगी।

आप एक कस्टम कनवर्टर इस तरह से लिख सकते हैं:

public class IdToCustomerConverter implements Converter<String, Customer>{ 
    @Autowired CustomerRepository customerRepository; 
    public Customer convert(String id) { 
     return this.customerRepository.findOne(Long.valueOf(id)); 
    } 
} 

अब वसंत MVC के साथ इस कनवर्टर रजिस्टर:

<mvc:annotation-driven conversion-service="conversionService"/> 

<bean id="conversionService" 
    class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 
    <property name="converters"> 
     <list> 
      <bean class="IdToCustomerConverter"/> 
     </list> 
    </property> 
</bean> 
+2

मुझे इस तरह के दृष्टिकोण के बारे में क्या नापसंद है कि आप डेटाबेस से ऐसे आईडी के साथ डेटा ऑब्जेक्ट लोड कर चुके हैं। अब जब आप इसे स्ट्रिंग से ऑब्जेक्ट में वापस कनवर्ट करते हैं, तो आप इसे फिर से डीबी से प्राप्त करते हैं। –

+0

@ बिजू कुंजुमेन: क्या आप कृपया एनोटेशन और कंट्रोलर क्लास कोड के साथ अपना उत्तर अपडेट कर सकते हैं –

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