Spring MVC標籤checkboxes,radiobuttons和selects的兩種匹配模式
阿新 • • 發佈:2018-12-19
Spring MVC中的checkboxes,radiobuttons和selects可以方便的把List,Set和Map物件的field對映到html文件中的選項標籤中,同時可以提供default選項。但是有一個細節需要注意,以checkboxes為例,下面的程式碼是可以正確執行的:
<form:form modelAttribute="user" method="post" action="selectForm" > <table> <tr> <td>興趣:</td> <td> <form:checkboxes path="hobbies" items="${hobbyList}" itemLabel="name" itemValue="id"/> </td> </tr> </table> </form:form>
@GetMapping(value="/selectForm4") public String selectForm4(Model model) { User user = new User(); List<Hobby> 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<Hobby> 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<Hobby> l = new ArrayList<>(); l.add(new Hobby(1, "動漫")); l.add(new Hobby(2, "遊戲")); user.setHobbies(l); List<Hobby> 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:
<form:form modelAttribute="user" method="post" action="selectForm" >
<table>
<tr>
<td>興趣:</td>
<td>
<form:checkboxes path="hobbyIds" items="${hobbyList}"
itemLabel="name" itemValue="id"/>
</td>
</tr>
</table>
</form:form>
@GetMapping(value="/selectForm4")
public String selectForm4(Model model) {
User user = new User();
List<Integer> l = new ArrayList<>();
l.add(1);
l.add(2);
user.setHobbyIds(l);
List<Hobby> 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匹配。