我的表单有一个text field
和一个dropdown list
。当我第一次加载表单时,会有一个list of values in the dropdown list
。
如果我正在提交form
,而我的表单中有errors
,我会尝试返回相同的表单以显示错误并重新提交错过的数据。
但如果我的表单reloads
通过POST
的{{1}}方法,则下拉列表中没有值。
我的弹簧控制器,
controller
我的 ListStore 类将是,
@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";
}
}
当我的表单通过控制器的POST方法重新加载时,如何恢复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
解决了这个问题,
map.addAttribute("age",(ArrayList<String>)getList.ageList());
但有没有其他方法可以轻松完成这项工作?
希望我们的堆叠成员能帮助我。
答案 0 :(得分:1)
我通常从动作(POST)方法调用display方法来避免代码重复。请参阅下面的略微修改的代码。我还对您的代码做了一些小改动,以跟随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";
}
}
答案 1 :(得分:0)
我可以从你的代码中看到,
如果您的表单有错误,那么它只是返回“ApplicationForm”视图名称,没有显示模型数据以查看将显示哪个视图
if(result.hasErrors()){
System.out.println("It has some errors !!!!!!!!");
return "ApplicationForm";
}
答案 2 :(得分:0)
在getList属性上添加@Autowired
注释。
@Controller
public class FormController {
@Autowired //annotation added
private ListStore getList;
-----
答案 3 :(得分:0)
@ModelAttribute
会帮助你。
@ModelAttribute
public ModelMap setupForm(ModelMap modelMap) {
modelMap.put("age",(ArrayList<String>)getList.ageList());
return modelMap;
}
This is a nice article了解处理Spring表单。