gpt4 book ai didi

java - Spring MVC 表单 - 下拉列表中没有项目?

转载 作者:行者123 更新时间:2023-11-30 11:30:19 24 4
gpt4 key购买 nike

我的表格有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com