2016-06-27 16 views
0

我有以下的JSP類下拉數據dissappear提交後,Spring MVC的

<form:form method="POST" modelAttribute="task"> 
     <form:input type="hidden" path="id" id="id"/> 
     <table> 
      <tr> 
       <td><label for="reference">Reference: </label> </td> 
       <td><form:input path="reference" id="reference"/></td> 
       <td><form:errors path="reference" cssClass="error"/></td> 
      </tr> 

      <tr> 
       <td><label for="cause">Cause: </label> </td> 
       <td><form:input path="cause" id="cause"/></td> 
       <td><form:errors path="cause" cssClass="error"/></td> 
      </tr> 
      <tr> 
       <td><label for="offense">Offense: </label> </td> 
       <td><form:select path="offense.id" items="${offenses}" required="true" itemLabel="offense" itemValue="id"/> </td> 
       <td><form:errors path="offense" cssClass="error"/></td> 
      </tr> 

      <tr> 
       <td colspan="3"> 
        <c:choose> 
         <c:when test="${edit}"> 
          <input type="submit" value="Update"/> 
         </c:when> 
         <c:otherwise> 
          <input type="submit" value="Register"/> 
         </c:otherwise> 
        </c:choose> 
       </td> 
      </tr> 
     </table> 
    </form:form> 

和控制器方法是這樣的

@RequestMapping(value = {"/new"}, method = RequestMethod.GET) 
public String newTask(ModelMap model) { 
    Task task = new Task(); 
    List<Offense> offenses = offenseService.findAllOffenses(); 

    model.addAttribute("task", task); 
    model.addAttribute("edit", false); 
    model.addAttribute("offenses", offenses); 
    return "registration"; 
} 

@RequestMapping(value = {"/new"}, method = RequestMethod.POST) 
public String saveEmployee(@Valid Task task, BindingResult result, 
     ModelMap model) { 

    if (result.hasErrors()) { 
     return "registration"; 
    } 

    if (!taskService.isTaskUniqueReference(task.getReference())) { 
     FieldError referenceError = new FieldError("Task", "reference", messageSource.getMessage("non.unique.reference", new String[]{String.valueOf(task.getReference())}, Locale.getDefault())); 
     result.addError(referenceError); 
     return "registration"; 
    } 

    taskService.saveTask(task); 

    model.addAttribute("success", "Task " + task.getReference() + " registered successfully"); 
    return "success"; 
} 

的問題是,當我點擊提交和錯誤是觸發,例如重複的參考字段,錯誤將正確顯示在參考字段的左側,但下拉菜單中的選項消失,爲什麼初始模型圖數據丟失?我怎麼能解決這個問題,我試圖在hasErrors()的情況下將模型映射添加到模型映射中,但沒有解決問題。

+0

每次返回「註冊」頁面,請務必添加所有必需的對象模型。這應該解決它。 – Olantobi

+0

有意義 –

回答

0

試試這個:

List<Offense> offenses = offenseService.findAllOffenses(); 
if (!taskService.isTaskUniqueReference(task.getReference())) { 
    FieldError referenceError = new FieldError("Task", "reference", 
       messageSource.getMessage("non.unique.reference", 
       new String[] { String.valueOf(task.getReference()) }, Locale.getDefault())); 
    result.addError(referenceError); 
    model.addAttribute("offenses", offenses); 
    return "registration"; 
} 
+0

要去嘗試明天,thx –