2012-11-05 7 views
22

मेरे पास दो मॉडल एट्रिब्यूट्स वाला एक फॉर्म है, एक नागरिक है और दूसरा सजा है। दो ऑब्जेक्ट्स jquery टैब से अलग होते हैं। मुझे फॉर्म पर आइटम ठीक से प्रदर्शित करने में समस्याएं आ रही हैं कुछ प्रदर्शित किए जा रहे हैं और कुछ नहीं हैं। मेरा मतलब एचटीएमएल तत्व है।उसी फॉर्म पर स्प्रिंग एमवीसी एकाधिक मॉडल एट्रिब्यूट

मुझे यकीन नहीं है कि पेज पर एकाधिक मॉडेल एट्रिब्यूट होने पर नियंत्रक कैसा दिखाई देगा। के तहत कोड का एक नमूना है:

पृष्ठ

<title>Citizen Registration</title> 

    </head> 

    <body> 
     <div id="tabs"> 

     <ul> 
      <li><a href="#tab1">Citizen Registration</a></li> 
      <li><a href="#tab2">Punishment</a></li> 
     </ul> 


     <div id="tab1"> 
      <form:form id="citizenRegistration" name ="citizenRegistration" method="post" modelAttribute="citizens" action="citizen_registration.htm"> 
       <div id="divRight" class="mainDiv">    
        <div class="divGroup" id="divCharInfo"> 
        <fieldset> 
        <legend>Characteristics Info</legend> 
          <ol>  
           <li><form:label for="photo" path="photo">Select Photo</form:label> 
            <form:input path="photo" type="file" id="photo" title="Upload a photo"/><form:errors path="photo" id="errors"/></li> 

           <li> 
            <label>Select Gender</label> 
            <form:select path="genderId" id="genderId" title="Select Your Gender"> 
            <form:options items = "${gender.genderList}" itemValue="genderId" itemLabel="genderDesc" /> 
            </form:select> 
            <form:errors path="genderId" class="errors"/> 
           </li>    

           <li><form:label for="weight" path="weight">Enter Weight <i>(lbs)</i></form:label> 
            <form:input path="weight" id="weight" title="Enter Weight"/><form:errors path="weight" id="errors"/> 
           </li> 

           <li><form:label for="height" path="height">Enter Height <i>(feet)</i></form:label> 
            <form:input path="height" id="height" title="Enter Height"/><form:errors path="height" id="errors"/> 
           </li> 
               ....................... 


      <div id="tab2"> 
       <form:form id="punishmentRegistration" name ="punishmentRegistration" method="post" modelAttribute="punishment" action="punishment_registration.htm"> 

       <ol> 
        <li> 
         <form:label for ="punishmentId" path="punishmentId">Punishment Number</form:label> 
         <form:input path="punishmentId" id="punishmentId"/><form:errors path="punishmentId" id="errors"/>     
        </li> 

        <li> 
         <form:label for="crimeRecNo" path="crimeRecNo">Select Crime</form:label> 
         <form:select path="crimeRecNo" id="CrimeRecNo" title="Select Crime"> 
         <form:options items = "${crime.crimeList}" itemValue="crimeRecNo" itemLabel="crimeRecNo" title="crimeDesc"/> 
         </form:select> 
         <form:errors path="crimeRecNo" id="errors"/> 
        </li> 

        <li> 
         <form:label for ="monitoringStDate" path="monitoringStDate"> Start Date </form:label> 
         <form:input path="monitoringStDate" id="monitoringStDate"/><form:errors path="monitoringStDate" id="errors"/>     
        </li> 


        <li> 
         <form:label for ="monitoringEnDate" path="monitoringEnDate"> End Date </form:label> 
         <form:input path="monitoringEnDate" id="monitoringEnDate"/><form:errors path="monitoringEnDate" id="errors"/>     
        </li>     
       </ol>    

       </form:form>    
      </div>      

     </div> 

    </body> 
</html> 

नियंत्रक

@RequestMapping(value="citizen_registration.htm", method = RequestMethod.GET) 
    public ModelAndView loadPage(HttpServletRequest request, 
           HttpServletResponse response, 
           @ModelAttribute Citizens citizens, @ModelAttribute Punishment punishment, 
           BindingResult result, 
           ModelMap m, Model model) throws Exception { 

//code here 

return new ModelAndView("citizen_registration"); 

यह मेरा कोड लेकिन जब मैं इसे tab2 में कुछ भी नहीं प्रदर्शित किया जाता है andnot में सभी तत्वों को चलाया जाता है टैब 1 दिखाया गया है।

उत्तर

26

मुझे ऐसा नहीं लगता है अगर आप स्प्रिंग फॉर्म का उपयोग करके कई मॉडलों को बाध्य कर सकते हैं। वास्तव में आपको वसंत बाध्यकारी रूप में एक नज़र रखना चाहिए। http://static.springsource.org/spring/docs/1.1.5/taglib/tag/BindTag.html नमूना कोड में एक नज़र डालें। मैंने कोड का परीक्षण नहीं किया है। किसी भी मुद्दे के मामले में जानें।

मॉडल

public class User{ 

private String username; 
private String password; 

..Setter and Getters 
} 

public class UserProfile{ 
private String firstName; 
private String lastName; 

setter and getter 
} 

नियंत्रक

@Controller 
public class MyController{ 
    @RequestMapping(....) 
    public String newAccountForm(ModelMap map){ 
     User user = new User(); //Would recommend using spring container to create objects 
     UserProfile profile = new UserProfile(); 

     map.addAttribute('user', user); 
     map.addAttribute('profile', profile); 

     return "form" 
    } 




    @RequestMapping(....) 
     public String newAccountForm(@ModelAttrbite('User')User user, BindingResult resultUser, @ModelAttribute('UserProfile')UserProfile userProfile, BindingResult resultProfile){ 

//Check the binding result for each model. If not valid return the form page again 
//Further processing as required. 

     } 
    } 

JSP

<%@taglib uri="http://www.springframework.org/tags" prefix="spring"> 

<form action="" method="post"> 

<spring:bind path="user.username"> 
    <input type="text" name="${status.expression}" value="${status.value}"><br /> 
     </spring:bind> 

<spring:bind path="user.password"> 
    <input type="password" name="${status.expression}" value="${status.value}"><br /> 
     </spring:bind> 

<spring:bind path="profile.firstName"> 
    <input type="text" name="${status.expression}" value="${status.value}"><br /> 
     </spring:bind> 
<spring:bind path="profile.lastName"> 
    <input type="text" name="${status.expression}" value="${status.value}"><br /> 
     </spring:bind> 

<input type="submit" value="Create"/> 
</form> 
+1

क्या आप एक कक्षा बनाते हैं जो इन दो वर्गों का संदर्भ देता है जो काम करेगा? – devdar

+1

ठीक है अगर आप मानक वसंत रूपों के साथ जाना चाहते हैं। फिर कई मॉडलों को बांधने के लिए आप मॉडल युक्त एक फॉर्म क्लास बना सकते हैं। लेकिन मैंने वसंत बाध्यकारी रूप को आसान पाया क्योंकि वे एक अतिरिक्त कक्षा को लागू करने की आवश्यकता को हटा देते हैं। इसके अलावा, प्रत्येक मॉडल के लिए सत्यापन अलग से किया जा सकता है। इसके अलावा, यह नेस्टेड मॉडल को बांधने की कार्यक्षमता भी प्रदान करता है। –

+0

मैं समझता हूं कि आप क्या कह रहे हैं कि आप केवल अलग-अलग रूपों का उपयोग करने की सिफारिश करेंगे? – devdar

1

मैं पहले से ही इस लिंक here

<form:form method="POST" modelAttribute="applicationGeneralInformation"> 
    <div class="section2"> 
    <h2>General Informaion</h2> 

    <form:input type="hidden" path="id" id="id"/> 
    <label for="app_version">Version</label>: <form:input type="text" id="app_version" path="version"/><br/> 
    <label for="app_func_desc">Description</label>: <form:input type="text" id="app_func_desc" 
                     path="functionalDescription"/><br/> 
    <label for="app_sec_func">Functions</label>: <form:input type="text" id="app_sec_func" 
                    path="securityFunctions"/><br/> 

</div> 
<div class="section2"> 
    <h2>Application Content</h2> 
    <form:form method="POST" modelAttribute="applicationContent"> 
    <div> 
     <h3>CIA Rating</h3> 
     <label for="CIARating">CIA Rating</label>: <form:select type="text" id="CIARating" path="CIARating"> 
     <form:option value="1">1</form:option> 
     <form:option value="2">2</form:option> 
     <form:option value="3">3</form:option> 
     <form:option value="4">4</form:option> 
    </form:select><br/><br/> 
    </div> 
    <div> 
     <h3>Business Continuity and Disaster Recovery</h3> 
     <div> 
      <h4>RTO</h4> 
      <label for="RTO">RTO</label>: <form:select type="text" id="RTO" path="RTO"> 
      <form:option value="1">< 2<sub>Hrs</sub></form:option> 
      <form:option value="2">2<sub>Hrs</sub>-4<sub>Hrs</sub> </form:option> 
      <form:option value="3">4<sub>Hrs</sub>-48<sub>Hrs</sub></form:option> 
      <form:option value="4">> 48<sub>Hrs</sub></form:option> 
     </form:select><br/> 
     </div> 
     <div> 
      <h4>RPO</h4> 
      <label for="RPO">RPO</label>: <form:input type="text" id="RPO" path="RPO"/><br/> 
     </div> 
    </div> 
    </form:form> 
    <input type="submit" value="Submit"> 
</div> 
</form:form> 
में वैकल्पिक दृष्टिकोण दे दी है

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

  • कोई संबंधित समस्या नहीं^_^