2014-01-30 97 views
2

我遇到了驗證窗體的問題,窗體有很多不同的字段(輸入文本字段,選擇選項,多選擇選項...)。我已經用spring security開發了關於驗證表單的所有邏輯源代碼,但是當驗證表單失敗(例如,用戶不填寫任何內容)並重新加載表單時,所有輸入文本字段都被正確填充,但是選擇選項和多個選擇選項已被刪除,用戶必須重新選擇。爲什麼不填充文本字段?Spring MVC選擇窗體中的值:在窗體驗證錯誤後選擇

這是我的一塊視圖:

<tr> 
      <td><form:label path="TechContactName"><spring:message code="label.techcontactname"/><sup>*</sup></form:label></td> 
      <td><form:input path="TechContactName" /></td> 
      <td><form:errors path="techContactName" cssClass="error" /></td> 
     </tr> 


<tr> 
      <td><form:label path="LicenseProduct"><spring:message code="label.licenseproduct"/><sup>*</sup></form:label></td> 
      <td><form:select path="licenseProduct" id="selectProduct" size="6" > 
         <option >Option 1</option> 
         <option >Option 2</option> 
         <option >Option 3</option> 
         <option >Option 4</option> 
         <option >Option 5</option> 
         <option >Option 6</option> 
       </form:select></td> 
      <td><form:errors path="licenseProduct" cssClass="error" /></td> 
    </tr> 

    <tr> 
      <td><form:label path="DeployCountries"><spring:message code="label.deploycountries"/><sup>*</sup></form:label></td> 
      <td><form:select path="deployCountries" id="selectCountries" multiple="multiple" > 
         <option value="AT">Austria</option> 
         <option value="BE">Belgium</option> 
         <option value="DK">Denmark</option> 
         <option value="FI">Finland</option> 
         <option value="FR">France</option> 
         <option value="DE">Germany</option> 
       </form:select> </td> 
      <td><form:errors path="deployCountries" cssClass="error" /></td> 
     </tr> 

而我的控制器:

@SuppressWarnings("finally") 
    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String addLicense(@Valid @ModelAttribute(value="license") LicenseEntity license, BindingResult result, ModelMap map, HttpServletRequest request) 
    { 
     if(result.hasErrors()){ 
      System.out.println("validation errors size..."+result.getErrorCount()); 

      return "editLicenseList"; 
     } else { 
      //all works correctly   
     } 

    } 

的形式輸入文本字段SI當驗證失敗時正確填寫但形式:選擇和形式:選擇多個失敗並用選定的任何值重新加載表單。

在此先感謝!

回答

2

嘗試使用Spring的<form:option>標記,而不是HTML自己的<option>標記。這將確保選項在驗證失敗後保持選中狀態(因爲Spring將設置selected屬性)。

<form:select path="licenseProduct" id="selectProduct" size="6" > 
    <form:option value="Option 1"/> 
    <form:option value="Option 2"/> 
    <form:option value="Option 3"/> 
    <form:option value="Option 4"/> 
    <form:option value="Option 5"/> 
    <form:option value="Option 6"/> 
</form:select> 

而且

<form:select path="deployCountries" id="selectCountries" multiple="multiple" > 
    <form:option value="AT" label="Austria"/> 
    <form:option value="BE" label="Belgium"/> 
    <form:option value="DK" label="Denmark"/> 
    <form:option value="FI" label="Finland"/> 
    <form:option value="FR" label="France"/> 
    <form:option value="DE" label="Germany"/> 
</form:select> 
+0

感謝威爾基林非常多!簡單的選擇完美的作品,但多選擇不,如果我選擇了多個選項後驗證表單,並重新加載它沒有選擇任何東西,有什麼辦法來保持選擇? – pedrojo05

+0

您可以使用調試器檢查提交表單後模型中的'LicenseEntity.deployCountries'列表是否已填充?這個列表的值需要匹配''標籤中'value'的值 - 因此一個或多個字符串'AT','BE'等 –