2012-11-05 62 views
22

我有一個表單有兩個ModelAttributes一個是公民,另一個是懲罰。這兩個對象由jquery選項卡分隔。我在獲取表單上的項目時出現問題,顯示正確,有些正在顯示,有些則沒有。我的意思是html元素。Spring MVC多個ModelAttribute以相同的形式

我不確定控制器在頁面上有多個ModleAttributes時的外觀。下的代碼示例:

<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中的所有元素顯示tab1。

回答

26

我不這麼認爲,如果你可以使用Spring表單綁定多個模型。事實上,你應該看看春季裝訂表格。 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

那麼如果你想沿着標準的彈簧形式走。然後綁定多個模型,您可以創建一個包含這些模型的Form類。但是我發現彈簧綁定表格更容易,因爲他們刪除了實現額外類的要求。此外,每個模型的驗證可以單獨完成。此外,它還提供了綁定嵌套模型的功能。 –

+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> 
相關問題