我已经发布了有关使用Spring MVC标签库处理'checkbox'标签的帖子。 现在,我要开发此主题并继续使用“复选框”标签。 它并不难,但是在某些情况下,您最好使用它。 在本文中,我将结合java.util.List和java.util.Map提供Spring'checkboxes'标记的示例,因此准备研究两个示例。
在开始演示示例之前,我想谈谈“复选框”标签的用途。 那么什么时候应该使用它呢? 如果要在运行时中生成复选框,答案很明显
您必须使用“复选框”标签。 这将帮助您避免JSP中的硬编码值。 'checkboxes'标签可以与数组和java.util.Collection一起使用。 进一步,我将研究List和Map的两种情况。
列表和“复选框”标签
第一个示例将与列表一起使用。 与上一篇文章一样,我必须创建一个POJO并使用适当的getter和setter方法在其中声明所需的List属性。
public class FootballTeams {private List teamsList;public List getTeamsList() {
return teamsList;
}public void setTeamsList(List teamsList) {
this.teamsList = teamsList;
}}
创建域模型后,我应该使用两种方法开发控制器-一种用于在带有复选框的页面上导航,另一种用于处理复选框。
@Controller
public class FootballController {@RequestMapping(value="/football-page")
private ModelAndView footballPage() {
ModelAndView mav = new ModelAndView("football-form");List teams = new ArrayList();
teams.add("Bavaria Munich");
teams.add("Borussia Dortmund");
teams.add("Real Madrid");
teams.add("Barcelona");mav.addObject("teamsList", teams);
mav.addObject("footballTeams", new FootballTeams());return mav;
}@RequestMapping(value="/football-result")
private ModelAndView processTeams(@ModelAttribute FootballTeams footballTeams) {
ModelAndView mav = new ModelAndView("football-result");
mav.addObject("footballTeams", footballTeams);
return mav;
}}
请注意,在footballPage()方法中,我创建了球队列表,然后将其添加到模型中。 第二种方法不包含任何特殊内容,因此我不想考虑它。 现在,让我们检查一下视图片段:
...
<h1>Football page</h1>
<form:form method="POST" commandname="footballTeams" action="football-result.html">
<table><tbody><tr><td>
<ul>
<form:checkboxes element="li" path="teamsList" items="${teamsList}">
</form:checkboxes></ul></td></tr><tr><td><input value="Submit" type="submit"></td></tr>
</tbody></table>
</form:form>
...
在这里,我需要暂停一下,并说明发生了什么。 在“复选框”标签中,我指定了路径属性。 该属性的值对应于FootballTeams类的适当字段。 items属性包含列表的值,该值是我在控制器的footballPage()方法中生成的。
最后一个视图:
...
<h1>Football result page</h1>
Selected teams:
<br>
<c:foreach var="team" items="${footballTeams.teamsList}">
${team}<br>
</c:foreach>
...
在这里,我仅介绍上一页中选择的项目。 请注意,复选框的标签和值与列表中指定的相同。 如果要为一个复选框使用不同的值和标签,则必须使用java.util.Map。
地图和“复选框”标签
第二个示例将与地图一起使用。 因此,如您所愿,我将展示如何为相同的复选框使用不同的值和标签。 本节的结构与上一部分相同,所以让我们开始吧!
域模型:
public class Tourism {private List countries;public List getCountries() {
return countries;
}public void setCountries(List countries) {
this.countries = countries;
}}
不要惊慌,您在课堂上没有看到任何Map字段,稍后您将意识到这一点。
@Controller
public class TourismController {@RequestMapping(value="/tourism-page")
private ModelAndView tourismPage() {
ModelAndView mav = new ModelAndView("tourism-form");Map countries = new HashMap();
countries.put("UKR", "Ukraine");
countries.put("ENG", "England");
countries.put("USA", "United States");mav.addObject("countriesMap", countries);
mav.addObject("tourism", new Tourism());return mav;
}@RequestMapping(value="/tourism-result")
private ModelAndView processTourism(@ModelAttribute Tourism tourism) {
ModelAndView mav = new ModelAndView("tourism-result");
mav.addObject("tourism", tourism);
return mav;
}}
此处,在tourismPage()方法中,地图出现在场景中。
...
<h1>Tourism page</h1>
<form:form method="POST" commandname="tourism" action="tourism-result.html">
<table><tbody><tr><td>
<ul>
<form:checkboxes element="li" path="countries" items="${countriesMap}">
</form:checkboxes></ul></td></tr><tr><td><input value="Submit" type="submit"></td></tr>
</tbody></table>
</form:form>
...
Map的键将用作复选框的值,而Map的值将用作复选框的标签。
...
<h1>Tourism result page</h1>
Selected countries:
<br>
<c:foreach var="country" items="${tourism.countries}">
${country}<br>
</c:foreach>
...
现在该解释一下,为什么“旅游”课程中没有“地图”字段。 如您所见,结果页面上仅显示Map的键。 因此,键值对不会传递给模型。
摘要
在本教程中,您可以得出结论,“ checkboxes”标记更适合使用。 Spring MVC是一个非常灵活的框架,它为某些任务提供了某些工具。 根据目标使用地图或列表。 您可以在GitHub上查看源代码。
翻译自: https://www.javacodegeeks.com/2013/05/spring-mvc-form-handling-vol-3-checkboxes-processing.html