我試圖找出實現使用Spring MVC的3.2.x.下拉列表中選擇正確的/最佳方式我有4個下拉,2個級聯和1個靜態的JSP頁面。這裏是工作的典型的實現:正確方法
@Controller
@RequestMapping("/employeeSearch")
public class EmployeeSearchController {
.......
@ModelAttribute("employeeOrgList")
public List<EmployeeOrgList> populateOrgList(HttpServletRequest request) {
return employeeService.getEmployeeOrgList();
}
@ModelAttribute("employeeSubOrg1List")
public List<EmployeeSubOrg1List> populateSubOrg1List(HttpServletRequest request) {
return employeeService.getEmployeeSubOrg1List();
}
@ModelAttribute("employeeSubOrg2List")
public List<EmployeeSubOrg2List> populateSubOrg2List(HttpServletRequest request) {
return employeeService.getEmployeeSubOrg2List();
}
@ModelAttribute("employeeStatusList")
public List<EmployeeStatusList> populateStatusList(HttpServletRequest request) {
return employeeService.getEmployeeStatusList();
}
...............
問題: 在上面實現,用戶首先選擇的員工組織名單,頁面刷新來填充員工子組織1名列表,並在員工選擇子組織1那麼子組織2將被填充並且員工狀態下拉列表仍然填充。這段代碼工作得很好。但問題是我在EmployeeSearchController中有7個RequestMappings,包括那些處理下拉選擇的請求。因此,對於每一個電話,我打數據庫7×4 = 28次,我認爲這是不可接受的。
爲了解決我刪除@ModelAttribute上的所有4種方法,並手動將它們添加到當頁面被首次訪問的模型(RequestMapping設定爲GET)的問題。 JSP加載正常,但只要我選擇員工組織列表,員工子組織1列表就會填充,但員工組織列表和員工狀態列表爲空。下面是具體的方法:
//This is to initialize
@RequestMapping(method = { RequestMethod.GET })
public ModelAndView handlePageEntry(HttpServletRequest request, ModelMap modelMap) {
EmployeeSearchForm form = new EmployeeSearchForm();
ModelAndView modelView = new ModelAndView("employeeSearchTile");
modelView.addAttribute("form", form);
modelView.addAttribute("employeeOrgList", getEmployeeOrgList());
modelView.addAttribute("employeeSubOrg1ist", new ArrayList<EmployeeSubOrg1ist>());
modelView.addAttribute("employeeSubOrg2ist", new ArrayList<EmployeeSubOrg1ist>());
modelView.addAttribute("employeeStatusList", getEmployeeStatusList());
return modelView;
}
//This one is called when we select employee org list
@RequestMapping(method = { RequestMethod.POST }, params = { "submitAction=employeeOrgSelected" })
public ModelAndView populateEmployeeSubOrg1(@ModelAttribute(value = "form") EmployeeSearchForm form, ModelMap modelMap) {
ModelAndView modelView = new ModelAndView("employeeSearchTile");
modelView.addAttribute("form", form);
modelView.addAttribute("employeeSubOrg1ist", getEmployeeSubOrg1ist(form.getSelectedEmployeeOrg));
return modelView;
}
很顯然,我沒有加入員工組織和員工狀態列表回到模型我也沒有將它們設置在會話(我不想做)。如果我想在模型上設置它們,那麼我必須再次爲這兩個列表點擊數據庫。它比打28次更好,但我仍然希望專家權衡。
那麼,什麼是完成這一任務沒有這麼多次到數據庫的最好方法?
你可能想看看Ajax的,所以你不必重裝每次下拉一次後,整個頁面都會變化。 – developerwjk
謝謝@developerwjk,Ajax是一種可能的解決方案,但由於網站需要「無障礙」我不能用它(508兼容) – user1294057