下拉列表是Web表单中最常见的元素之一。 在HTML中,可以使用适当的标签创建此类控件: <form:select> –下拉列表的父标签和<form:option> – <form:select>标签的子标签。 Spring MVC标签库为下拉列表提供了自己的解决方案。 在这篇文章中,我将写关于<form:select> , <form:option>和<form:options>标签。
在以前的有关使用Spring MVC进行表单处理的文章中,我概述了需要将文本字段,复选框或单选按钮与Java对象绑定的情况。 对于select下拉列表元素,几乎将重复所有步骤。 此外,在使用Spring MVC标签库将其与java对象绑定的上下文中,我将通过下拉列表检查三种情况。 第一种情况是有关form:select标记,其值基于java.util.Map ,第二种情况是有关form:select标记与form:option标记结合使用的,第三种情况是有关form的用法:选择标记与form:options标记结合使用。
每个示例都将具有相同的结果jsp页面,因此只有表单页面和它们的控制器是不同的。 配置的设置将被省略,因为在上一篇文章中已对此进行了说明。
Spring MVC选择标签
假设Web应用程序的用户可以选择手机的生产商(例如HTC,SAMSUNG,IPHONE等)。 我们可以使用Spring MVC表单标签库以几种方式实现此目的。
域模型:
public class Smartphone {private String phone;public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}}
此类将绑定到表单。
SmartphoneController:
...@RequestMapping(value="/phone-page")private ModelAndView selectTag() {ModelAndView mav = new ModelAndView("phone-form");Map< String, String > phones = new HashMap();phones.put("samsung", "SAMSUNG");phones.put("nokia", "NOKIA");phones.put("iphone", "IPHONE");mav.addObject("phonesMap", phones);mav.addObject("smartphone", new Smartphone());return mav;}@RequestMapping(value="/phone-result")private ModelAndView processPhone(@ModelAttribute Smartphone smartphone) {ModelAndView mav = new ModelAndView("phone-result");mav.addObject("smartphone", smartphone); return mav;}
...
在selectTag()方法中,我创建一个具有值的Map,这些值将在下拉菜单中显示在页面上。 第二种方法processPhone(@ModelAttribute Smartphone Smartphone,将用作所有示例的共享端点。
此示例的JSP:
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table><tbody><tr><td><ul><form:select path="phone" items="${phonesMap}"></form:select></ul></td></tr><tr><td><input value="Submit" type="submit"></td></tr>
</tbody></table>
</form:form>
而已
Spring MVC选项标签
第二个示例将使用<form:option>标记的硬编码值。
控制器:
...@RequestMapping(value="/phone-option-page")private ModelAndView optionTag() { return new ModelAndView("phone-option-form", "smartphone", new Smartphone());}
...
注意JSP:
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table><tbody><tr><td><ul><form:select path="phone"><form:option value="samsung">SAMSUNG</form:option><form:option value="nokia">NOKIA</form:option><form:option selected="selected" value="htc">HTC</form:option><form:option value="iphone">IPHONE</form:option></form:select></ul></td></tr><tr><td><input value="Submit" type="submit"></td></tr>
</tbody></table>
</form:form>
Spring MVC选项标签
最后一个示例演示如何使用<form:options>标记。
控制器:
...@RequestMapping(value="/phone-options-page")private ModelAndView optionsTag() {ModelAndView mav = new ModelAndView("phone-options-form");Map< String, String > phones = new HashMap();phones.put("samsung", "SAMSUNG");phones.put("nokia", "NOKIA");phones.put("iphone", "IPHONE");phones.put("bberry", "BLACKBERRY");phones.put("htc", "HTC");mav.addObject("phonesMap", phones);mav.addObject("smartphone", new Smartphone());return mav;}
...
以及适当的JSP:
...
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table><tbody><tr><td><ul><form:select path="phone"><form:option value="-" label="--Select phone"><form:options items="${phonesMap}"></form:options></form:option></form:select></ul></td></tr><tr><td><input value="Submit" type="submit"></td></tr>
</tbody></table>
</form:form>
...
如Spring官方文档中所指定的,您可以将任何类型的带有适当的getter和setter的java对象用于以下形式:options标签: items属性通常填充有item对象的集合或数组。 如果已指定,则itemValue和itemLabel只是引用那些item对象的bean属性; 否则,item对象本身将被字符串化。 或者,您可以指定项目映射,在这种情况下,映射键将解释为选项值,并且映射值对应于选项标签。 如果恰好同时指定了itemValue和/或itemLabel ,则item value属性将应用于地图键,item label属性将应用于地图值。
摘要
这些示例中的每一个在特定情况下都是方便的,应合理使用。 <form:option>标记可以在不需要大量选项的小型项目中使用,当您在数据库中存储下拉列表的值或当您在数据库中存储下拉列表的值时,应使用<form:options>需要在运行时生成值。 您可以在GitHub上找到本教程的源代码。
翻译自: https://www.javacodegeeks.com/2013/07/spring-mvc-form-handling-vol-5-select-option-options-tags.html