当我提交表单时,我丢失了listbox2的数据,必须再次在listbox1中重新选择。
您还没有提到如何绑定表单数据并从jsp传递到控制器,而是考虑使用如下所示的模型bean:
ProductBean类用于保存表单数据:
public class ProductBean {private String listbox1Selected;private String listbox2Selected; //no-arg constructor, getters and setters}用于在列表框或选择框中加载选项的选项类:
public class Option { private String name; public Option(){} public Option(String name) { super(); this.name = name; }}并在jsp中使用如下所示的方法在表单提交后获得所选选项:
<form:form method="post" modelAttribute="productBean"> <label for="listbox1">listbox1:</label> <form:select path="listbox1Selected"> <option value="NONE">--listbox1--</option> <form:options items="${listbox1Options}" itemValue="name" itemLabel="name"/> </form:select> <label for="listbox2">listbox2:</label> <form:select path="listbox2Selected"> <option value="NONE">--listbox2--</option> <form:options items="${listbox2Options}" itemValue="name" itemLabel="name"/> </form:select> <input type="submit" /></form:form>并在控制器中返回弹簧传递给POST参数的产品模型bean。
@Controller@RequestMapping("/selectBox")public class SelectBoxController { @RequestMapping(method=RequestMethod.GET) public String showSelectBox(Model model){ model.addAttribute("productBean", new ProductBean()); return "selectBox"; } @RequestMapping(method=RequestMethod.POST) public String showSelectBox(@ModelAttribute("productBean")ProductBean productBean, BindingResult result, ModelMap model){ System.out.println(productBean); model.addAttribute("productBean", productBean); return "selectBox"; } @ModelAttribute("listbox1Options") public List<Option> populateOpt(){ List<Option> lst = new ArrayList<Option>(); lst.add(new Option("Op1")); lst.add(new Option("Op2")); lst.add(new Option("Op3")); return lst; } @ModelAttribute("listbox2Options") public List<Option> populateOpt2(){ List<Option> lst = new ArrayList<Option>(); lst.add(new Option("Op4")); lst.add(new Option("Op5")); lst.add(new Option("Op6")); return lst; }}


