Spring MVC标签checkboxes,radiobuttons和selects的两种匹配模式

看到Spring+MyBatis企业应用实战(第二版)的Spring MVC的标签库一节时,有如下疑惑:checkboxes示例代码的最后一条和select+options示例代码的最后一条好像不太一样,checkboxes中employee.depts是个Dept对象的List,而select+options中user.deptId只是Dept对象中的id而已(是不是List其实不重要,关键在于这里直接用id匹配了Dept对象)。
Spring MVC中的checkboxes,radiobuttons和selects可以方便的把List,Set和Map对象的field映射到html文档中的选项标签中,同时可以提供default选项。但是有一个细节需要注意,以checkboxes为例,下面的代码是可以正确运行的:


	
兴趣:
	 @GetMapping(value="/selectForm4")
	 public String selectForm4(Model model) {
		 User user = new User();
		 List l = new ArrayList<>();
		 Hobby animation = new Hobby(1, "动漫");
		 Hobby computerGame = new Hobby(2, "游戏");
		 Hobby sports = new Hobby(3, "运动");
		 Hobby singing = new Hobby(4, "唱歌");
		 l.add(animation);
		 l.add(computerGame);
		 user.setHobbies(l);
		 
		 List hobbyList = new ArrayList<>();
		 hobbyList.add(animation);
		 hobbyList.add(computerGame);
		 hobbyList.add(sports);
		 hobbyList.add(singing);
		 model.addAttribute("user", user);
		 model.addAttribute("hobbyList", hobbyList);
	     return "selectForm";
	 }

但下面这个不可以:

	 @GetMapping(value="/selectForm4")
	 public String selectForm4(Model model) {
		 User user = new User();
		 List l = new ArrayList<>();
		 l.add(new Hobby(1, "动漫"));
		 l.add(new Hobby(2, "游戏"));
		 user.setHobbies(l);
		 
		 List hobbyList = new ArrayList<>();
		 hobbyList.add(new Hobby(1, "动漫"));
		 hobbyList.add(new Hobby(2, "游戏"));
		 hobbyList.add(new Hobby(3, "运动"));
		 hobbyList.add(new Hobby(4, "唱歌"));
		 model.addAttribute("user", user);
		 model.addAttribute("hobbyList", hobbyList);
	     return "selectForm";
	 }

区别在于,后面这个代码为CheckBox准备的选项列表hobbyList中的对象和default选项user.hobbies中的对象虽然“值”可以对应上,但其实不是同一个对象。可见在最终解析的时候是比较引用而不是比较值的。
另外一个方法可以只摄者default选项的value:


	
兴趣:
	 @GetMapping(value="/selectForm4")
	 public String selectForm4(Model model) {
		 User user = new User();
		 List l = new ArrayList<>();
		 l.add(1);
		 l.add(2);
		 user.setHobbyIds(l);
		 
		 List hobbyList = new ArrayList<>();
		 hobbyList.add(new Hobby(1, "动漫"));
		 hobbyList.add(new Hobby(2, "游戏"));
		 hobbyList.add(new Hobby(3, "运动"));
		 hobbyList.add(new Hobby(4, "唱歌"));
		 model.addAttribute("user", user);
		 model.addAttribute("hobbyList", hobbyList);
	     return "selectForm";
	 }

综上,checkboxes,radiobuttons和selects等Spring MVC中备选项和default选项之间的匹配存在两种匹配模式:按对象引用匹配和按value匹配。

你可能感兴趣的:(Spring MVC标签checkboxes,radiobuttons和selects的两种匹配模式)