我的表格有一个 text field
和一个dropdown list
.当我的表格第一次加载时有一个list of values in the dropdown list
.
如果我提交 form
,我的表格有任何 errors
,我正在尝试返回相同的表单以显示错误并重新提交丢失的数据。
但是如果我的表格 reloads
通过 POST
controller
的方法| , 下拉列表中没有值。
我的 Spring Controller ,
@Controller
public class FormController {
private ListStore getList;
@RequestMapping(value="/ApplicationForm.html",method=RequestMethod.GET)
public String displayForm(@ModelAttribute UserData userData,ModelMap map){
map.addAttribute("age",(ArrayList<String>)getList.ageList());
return "ApplicationForm";
}
@RequestMapping(value="/ApplicaitonForm.html",method=RequestMethod.POST)
public String displayFormDetails(@Valid UserData data,BindingResult result,ModelMap map,@RequestParam(value="name",required=true) String name,@RequestParam("age") String age){
if(result.hasErrors()){
System.out.println("It has some errors !!!!!!!!");
return "ApplicationForm";
}
map.addAttribute("name", name);
map.addAttribute("age", age);
return "DisplayFormDetails";
}
}
我的 ListStore 类将是,
public class ListStore {
public List<String> ageList(){
LinkedList<String> list = new LinkedList<String>();
list.add("20 to 25 years");
list.add("25 to 35 years");
list.add("above 35 years");
return list;
}
}
如何恢复 dropdown
中的值列表,当我的表单通过 Controller 的 POST 方法重新加载时?
但我通过添加 map.addAttribute("age",(ArrayList<String>)getList.ageList());
解决了这个问题正如在我的代码中一样,
if(result.hasErrors()){
System.out.println("Form has some errors !!!!!!!!");
map.addAttribute("age",(ArrayList<String>)getList.ageList());
return "ApplicationForm";
}
但是有没有其他方法可以轻松做到这一点?
希望我们的堆栈成员能帮助我。
最佳答案
我通常从操作 (POST) 方法调用显示方法以避免代码重复。请参阅下面稍作修改的代码。我还对您的代码做了一些小改动以遵循 Post/Redirect/Get pattern .
@Controller
public class FormController {
private ListStore getList;
@RequestMapping(value="/ApplicationForm.html", method=RequestMethod.GET)
public String displayForm(@ModelAttribute UserData userData, Model model){
model.addAttribute("age", getList.ageList());
return "ApplicationForm";
}
@RequestMapping(value="/ApplicaitonForm.html", method=RequestMethod.POST)
public String processForm(@Valid UserData data,
BindingResult result,
Model model,
@RequestParam(value="name", required=true) String name,
@RequestParam("age") String age,
RedirectAttributes redirectAttributes) {
if(result.hasErrors()){
System.out.println("It has some errors !!!!!!!!");
return displayForm(data, model); /* THIS IS THE TRICK :) */
}
redirectAttributes.addFlashAttribute("name", name);
redirectAttributes.addFlashAttribute("age", age);
return "redirect:/DisplayFormDetails.html"; // Redirect here to follow Post/Redirect/Get pattern
}
@RequestMapping(value="/DisplayFormDetails.html", method=RequestMethod.GET)
public String displayFormDetails(Model model){
// name and age are already in model due to use of RedirectAttributes
return "DisplayFormDetails";
}
}
关于java - Spring MVC 表单 - 下拉列表中没有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17837971/