2013-04-16 38 views
0

我有一個表單,當用戶在數據庫中插入一條記錄時,他們可能希望同時創建一條新記錄,並且他們可以單擊一個新按鈕。我定義了一個控制器來接受這個命令,並且只在列表框被填充的情況下返回給用戶一個空白視圖,但是視圖不會回到空白,它會將前一個數據插入到數據庫中。Spring MVC向用戶返回一個空白視圖

代碼:

用戶選擇以下按鈕

<button class="btn" value="new" onclick="submitPage('${pageContext.request.contextPath}/crime_registration_new.htm');" type="button" >New</button> 

控制器的方法:

我想擺脫舊的犯罪對象的

@RequestMapping(value="crime_registration_new.htm", method = RequestMethod.POST) 
    public ModelAndView loadNew(HttpServletRequest request, 
     HttpServletResponse response, 
     @ModelAttribute Crime crime, 
     Model model) throws Exception { 

    try{ 

     logger.debug("In Crime Registration Controller"); 

     myCriminalList.put("dbcriminalList", this.citizenManager.getListOfCriminals()); 
     myVictimList.put("dbvictimList", this.citizenManager.getListOfVictims()); 
     myStatusList.put("statusList", this.statusManager.getStatusList()); 
     myCrimeCategoryList.put("crimeCategoryList", this.crimeCategoryManager.getCrimeCategoryList()); 
     myCrimeLevelList.put("crimeLevelList", this.crimeLevelManager.getCrimeLevelList()); 
     myOfficerList.put("investigatingOfficerList", this.officerManager.getOfficersList()); 

     model.addAttribute("dbcriminals", myCriminalList); 
     model.addAttribute("dbvictims", myVictimList); 
     model.addAttribute("status", myStatusList); 
     model.addAttribute("crimeCategory", myCrimeCategoryList); 
     model.addAttribute("crimeLevel",myCrimeLevelList); 
     model.addAttribute("officers",myOfficerList); 
     model.addAttribute("crimeRecordNoStatus", "true"); 
     model.addAttribute("crimeRecordNoStatus", "true"); 
     model.addAttribute("save", "enabled"); 

     return new ModelAndView("crime_registration");   
    }catch(Exception e){     
     logger.debug("Exception In CrimeRegistration Controller : " + e.getMessage()); 
     return new ModelAndView("crime_registration");    
    }  
} 

回答

1

myCriminalListmyVictimList等似乎並沒有被local variablesinstance variables所以他們共享並可通過後續的方法調用訪問。請確保將這些字段聲明爲本地,以便它們綁定到該單個請求,並且不能在該請求範圍之外看到。

@RequestMapping(value="crime_registration_new.htm", method=RequestMethod.POST) 
public ModelAndView loadNew((...)) throws Exception { 
     // local variable - only accessible by current request 
     List<Criminal> myCriminalList = new ArrayList<Criminal>(); 

     myCriminalList.put("dbcriminalList", 
       this.citizenManager.getListOfCriminals()); 
     model.addAttribute("dbcriminals", myCriminalList); 
     return new ModelAndView("crime_registration"); 
     // (...) 
} 

而作爲一個側面說明,爲什麼不進一步簡化它:

@RequestMapping(value = "crime_registration_new.htm", method = RequestMethod.POST) 
public ModelAndView loadNew((...)) throws Exception { 
     // no need for intermediary List 
     model.addAttribute("dbcriminals", this.citizenManager.getListOfCriminals()); 
     // (...) 
     return new ModelAndView("crime_registration"); 
} 
1

我設置控制器方法返回的字符串和我用下面的用戶發回的觀點:

return "redirect: crime_registration.htm";