版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
JavaWeb编程技术这种将请求消息数据与后台方法参数建立关联的过程就是SpringMVC的数据绑定。SpringMVC提供了一个表单标签库可以实现数据绑定。SpringMVC数据绑定SpringMVC表单标签库第11章数据绑定与表单标签库在查询执行时,SpringMVC会根据客户端请求参数的不同,将请求消息中的信息以一定的方式转换并绑定到控制器类的方法参数中。数据绑定在数据绑定过程中,SpringMVC框架会通过数据绑定组件(DataBinder)将请求参数串的内容进行类型转换,然后将转换后的值赋给控制器类中方法的形参,这样后台方法就可以正确绑定并获取客户端请求的参数了。例如,可以将表单域绑定到Book对象的属性,如果输入数据合法,输入值将被转换成相应类型的数据保存到Book模型对象中,若输入验证失败,控制转回到输入页面,并将模型数据绑定到表单元素上。图11-1说明了图书价格绑定失败,控制转回到输入页面。11.1数据绑定
在SpringMVC框架中,数据绑定有这样几种情况:将请求参数绑定到请求处理方法的简单参数中或域模型属性上;模型数据到表单元素的绑定(如在控制器中初始化下拉列表选项值,然后添加到模型中绑定到表单元素上);模型数据到视图(表单字段)的绑定。11.1表单标签库SpringMVC提供了一个表单标签库,用于在JSP页面中生成HTML表单标签。使用这些标签可以实现数据绑定。通过数据绑定特征,可以将请求参数填充模型的各种类型属性。这种数据绑定的一个好处是,当输入验证失败时,会重新生成一个表单,无需重新填写输入字段。表单标签库定义在spring-webmvc-5.3.20.jar文件中,要使用表单标签,在JSP页面中使用下面taglib指令。<%@taglibprefix="form"uri="/tags/form"%>11.2表单标签库表11-1给出了表单标签库的常用标签。在下面小节中我们将讨论每一个标签,还通过一个示例演示使用表单标签实现数据绑定。11.2标签名说
明form生成HTML的表单元素input生成HTML的<inputtype="text"/>元素password生成HTML的<inputtype="passsword"/>元素hidden生成HTML的<inputtype="hidden"/>元素textarea生成HTML的textarea元素checkbox生成HTML的<inputtype="checkbox"/>元素checkboxes生成多个<inputtype="checkbox"/>元素radiobutton生成HTML的<inputtype="radiobutton"/>元素radiobuttons生成多个<inputtype="radiobutton"/>元素select生成HTML的select元素option生成HTML的option元素options生成多个option元素errors在span元素中生成字段错误<form>标签<form>标签用来生成HTML的表单标签。要创建表单输入域必须首先创建一个表单标签,<form>标签的属性如表11-2示。11.2.1属性名说
明modelAttribute指定绑定的模型属性的名称。默认值为commandacceptCharset指定服务器接受的字符编码列表cssClass指定表单元素CSS样式类名,相当于HTML的class属性。示例:<form:inputpath="userName"cssClass="inputStyle"/>。cssStyle指定表单元素CSS样式名,相当于HTML的style属性。示例:<form:inputpath="userName"cssStyle="width:100px"/>。htmlEscape指定输出是否包含HTML转义字符,值为true或false<form>标签modelAttibute属性可能是最重要的属性,它指定模型的名称,模型中包含的属性值将用于填充表单字段。如果指定该属性,必须在请求处理方法中添加对应的模型对象,该方法返回包含该表单的视图。例如,下面代码在<form>标签中指定了modelAttibute属性。在BookController类的inputBook()方法是请求处理方法,它返回inputBook.jsp视图。下面是inputBook()方法代码。<form:formmodelAtribute="book"action="save-book"method="post">...</form:form>@RequestMapping(value="/input-book")publicStringinputBook(Modelmodel){...model.addAttribute("book",newBook());return"inputBook";}11.2.1<form>标签
脚下留神在Spring5之前,<form>标签的commandName属性用于指定绑定的表单对象的名称。从Spring5开始,commandName属性被modelAttribute属性替换。如果在Spring5中使用commandName属性,则会导致运行时异常。11.2.1<input>标签<input>标签用来生成HTML的<inputtype="text"/>元素,该标签常用的属性如表11-3所示。该标签最重要的属性是path,它将该输入字段绑定到表单支持对象的属性上。例如,如果form标签的modelAttibute属性值是book,而<input>标签的path属性值是isbn,那么该<input>标签将被绑定到Book对象的isbn属性上。11.2.2属性名说
明path指定属性绑定的表单对象的属性名cssClass指定表单元素CSS样式名,相当于HTML的class属性cssStyle指定表单元素CSS样式名,相当于HTML的style属性cssErrorClass指定当表单元素发生错误时对应的样式类htmlEscape指定输出是否包含HTML转义字符,值为true或false<input>标签下面的<input>标签绑定到表单属性的author属性上。这与下面的<input/>标签等价。<form:inputid="author"path="author"cssErrorClass="errorBox"/><inputtype="text"id="author"name="author"/>11.2.2这里,cssErrorClass属性只有在author属性发生输入验证错误并且使用相同表单重新显示用户输入时才有效,此时,input标签转换为如下input元素。inputtype="text"id="author"name="author"class="errorBox"/><label>标签<label>标签用来生成HTML的<label>元素。该标签最重要的属性是path,它将该输入字段绑定到表单支持对象的属性上。
例如,如果<form>标签的modelAttibute属性值是customer,而input标签的path属性值是id,那么该<input>标签将被绑定到Customer对象的id属性上。11.2.3<hidden>标签<hidden>标签用于生成HTML的<inputtype="hidden"/>元素,该标签与<input>标签类似,但它不能显示,没有可视外观,因此不支持cssClass和cssStyle属性,但有htmlEscape和path属性。下面是<hidden>标签的示例。<form:hiddenpath="productId"/>11.2.4<password>标签<password>标签用于生成<inputtype="password"/>元素,该标签与<input>标签类似,具有cssClass、cssStyle、cssErrorClass、htmlEscape和path属性,另外还包含一个showPassword属性,该属性指定是否显示密码,默认值为false。下面是<password>标签的示例。<form:passwordid="pwd"path="password"cssClass="normal"/>11.2.5<textarea>标签<textarea>标签用于生成HTML的textarea元素。textarea元素也是一个输入元素,它支持多行输入。该标签与input标签类似,具有cssClass、cssStyle、cssErrorClass、htmlEscape和path属性。可以通过HTML的rows和cols属性指定textarea尺寸。rows规定了文本区内的可见行数,cols规定了文本区内的可见列数。下面是<textarea>标签的示例。<form:textareapath="note"tabindex="4"rows="5"cols="80"/>11.2.6<checkbox>标签<checkbox>标签用于生成<inputtype="checkbox"/>元素,它具有cssClass、cssStyle、cssErrorClass、htmlEscape和path属性。此外,还有一个label属性,它的值用于显示复选框的标签文本。下面<checkbox>标签绑定到outOfStock属性。<form:checkboxpath="outOfStock"value="OutofStock"/>11.2.7<checkboxes>标签<checkboxes>标签用于生成多个<inputtype="checkbox"/>元素,可出现在该标签中的属性如表11-4所示,这些属性都是可选的且不包含HTML属性。11.2.8属性名说
明cssClass指定表单元素CSS样式名,相当于HTML的class属性cssStyle指定表单元素CSS样式名,相当于HTML的style属性cssErrorClass指定当表单元素发生错误时对应的样式类htmlEscape指定输出是否包含HTML转义字符,值为true或falsepath指定属性绑定的表单对象的属性名delimiter指定两个输入元素之间的分隔符。默认情况没有分隔符element指定一个HTML元素来包含每个输入元素。默认值是span元素items指定Collection、Map或对象数组用来产生输入元素itemLabelitems属性中Collection、Map或对象数组的属性,它们为每个输入元素提供文本标记itemValueCollection、Map或对象数组的属性,它们为每个输入元素提供值<radiobutton>标签<radiobutton>标签用于生成<inputtype="radio"/>元素,它具有与checkbox标签相同的属性,包括:cssClass、cssStyle、cssErrorClass、htmlEscape、label和path属性。通常把多个radiobutton标签绑定到同一属性上,但它们具有不同的value属性值。下面的<radiobutton>标签绑定到gender属性上。性别:<form:radiobuttonpath="gender"value="Male"/><br/><form:radiobuttonpath="gender"value="Female"/>11.2.9<radiobuttons>标签<radiobuttons>标签用来生成多个<inputtype="radio"/>元素,可出现在该标签中的属性与<checkboxes>标签的属性相同。下面的<radiobuttons>标签产生模型属性categoryList的内容作为单选按钮组,在一个时刻只能选择一个选项。<form:radiobuttonspath="category"items="${categoryList}"/>11.2.10<select>标签<select>标签用于生成HTML的select元素,它用来构建一个下拉列表框。列表的选项可通过items指定一个集合、Map或数组,或者来自嵌套的<option>标签或<options>标签。可出现在该标签中的属性与radiobuttons标签的属性相同。其中,path属性指定对应表单对象的属性值;items属性用于构造下拉列表框选项的数据。items属性是最有用的属性,它可被绑定到集合、Map或对象数组产生select元素的选项。例如,下面select标签绑定到表单支持对象category属性的id属性。它的选项来自categories模型属性。每个选项值来自categories集合中每个对象的id属性,它的标签来自name属性。<form:selectid="category"path="category.id"items="${categories}"itemLabel="name"itemValue="id"/>11.2.11<option>标签<option>标签用来生成一个HTML的option元素,它用来定义下拉列表的一个选项,它必须用在<select>标签内。下面是<option>标签的示例。<form:selectid="category"path="category.id"items="${categories}"itemLabel="name"itemValue="id"><form:optionvalue="0">--Pleaseselect--</form:option></form:select>11.2.12<options>标签<options>标签用来生成一个HTML的option元素的列表,下面是该标签的一个示例。<form:selectpath="country"><form:optionvalue="0">--请选择--</form:option><form:optionsitems="${countryList}"itemValue=”code”itemLabel=”name”></form:options></form:select>11.2.13<errors>标签<errors>标签用来生成一个或多个HTML的span元素,其中每个包含一个字段错误消息。该标签可用来显示一个特定字段错误或所有字段错误。errors标签的属性如表11-5所示。所有的属性都是可选的,表中不包含可出现在span元素中的HTML属性。下面的<errors>标签将显示所有字段的错误消息。下面的<errors>标签将显示与表单支持对象email属性相关的字段错误消息。<form:errorspath="*"/><form:errorspath="email"/>11.2.14案例学习:表单标签应用使用Spring表单标签库的最大好处是数据绑定。下面的例子演示如何使用SpringMVC的密码框、文本区、单选按钮和列表框等标签。11.3.1设计POJO类11.3.2控制器类11.3.3视图11.3.4测试应用程序11.3案例学习:表单标签应用11.3User.java清单11.1publicclassUser{privateStringusername;//用户名privateStringpassword;//密码privateStringgender;//性别privateStringresume;//简历privateString[]hobby;//业余爱好privateStringlanguage;//精通的语言privateStringeducation;//学历privateString[]skills;//技能privatebooleanreceiveEmail;//是否订阅邮件}控制器类UserController.java清单11.2控制器类UserController定义了两个请求处理方法和几个普通方法。@ControllerpublicclassUserController{@RequestMapping(value="/input-user",method=RequestMethod.GET)publicModelAndViewinputUser(){Useruser=newUser(); user.setHobby((newString[]{"游泳","读书","登山"}));user.setGender("M");ModelAndViewmodelAndView=
newModelAndView("inputUser","command",user);returnmodelAndView;}11.3.2@RequestMapping(value="/save-user",method=RequestMethod.POST)publicStringsaveUser(@ModelAttribute("user")Useruser,ModelMapmodel){model.addAttribute("username",user.getUsername());model.addAttribute("password",user.getPassword());model.addAttribute("resume",user.getResume());model.addAttribute("receiveEmail",user.isReceiveEmail()); model.addAttribute("hobbyList",user.getHobby());model.addAttribute("gender",user.getGender());model.addAttribute("languageList",user.getLanguage());model.addAttribute("education",user.getEducation());model.addAttribute("skills",user.getSkills());return"showUser";}//返回hobbyList对象并将其设置为模型属性
@ModelAttribute("hobbyList")publicList<String>getHobbyList(){List<String>hobbyList=newArrayList<String>();hobbyList.add("读书");hobbyList.add("游泳");hobbyList.add("登山");returnhobbyList;}//返回languageList对象并将其设置为模型属性@ModelAttribute("languageList")publicList<String>getLanguageList(){List<String>languageList=newArrayList<String>();languageList.add("C");languageList.add("C++");languageList.add("Java");languageList.add("Python");returnlanguageList;}//返回educationList对象并将其设置为模型属性@ModelAttribute("educationList")publicMap<String,String>getEducationList(){Map<String,String>educationList=newHashMap<String,String>();educationList.put("1","学士");educationList.put("2","硕士");educationList.put("3","博士");returneducationList;}//返回skillsList对象并将其设置为模型属性@ModelAttribute("skillsList")publicMap<String,String>getSkillsList(){Map<String,String>skillList=newHashMap<String,String>();skillList.put("Spring","Spring");skillList.put("SpringMVC","SpringMVC");skillList.put("MyBatis","MyBatis");returnskillList;}视图inputUser.jsp清单11.3本应用包含两个视图页面,inputUser.jsp和showUser.jsp,将它们保存在WEB-INF\jsp目录中。<form:formmethod="post"action="save-user"><fieldset><legend>添加用户信息</legend><table><tr><td><form:labelpath="username">用户名</form:label></td><td><form:inputpath="username"/></td></tr><tr><td><form:labelpath="password">口令</form:label></td><td><form:passwordpath="password"/></td></tr>11.3.3<tr><td><form:labelpath="gender">性别</form:label></td><td><form:radiobuttonpath="gender"value="M"label="男"/><form:radiobuttonpath="gender"value="F"label="女"/></td></tr><tr><td><form:labelpath="resume">简历</form:label></td><td><form:textareapath="resume"rows="5"cols="30"/></td></tr><tr><td><form:labelpath="hobby">业余爱好</form:label></td><td><form:checkboxespath="hobby"items="${hobbyList}"/></td></tr><tr><td><form:labelpath="language">精通的语言</form:label></td><td><form:radiobuttonspath="language"items="${languageList}"/> </td></tr><tr><td><form:labelpath="education">学历</form:label></td><td><form:selectpath="education"><form:optionvalue="NONE"label="Select"/><form:optionsitems="${educationList}"/></form:select> </td></tr><tr><td><form:labelpath="skills">技能</form:label></td><td><form:selectpath="skills"items="${skillsList}"multiple="true"/></td></tr><tr><td><form:labelpath="receiveEmail">是否订阅邮件</form:label></td><td><form:checkboxpath="receiveEmail"/></td></tr> <tr><tdcolspan="2"><inputtype="submit"value="提交"/></td></tr></table></fieldset></form:form>showUser.jsp清单11.4<fieldset><l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2021年银行从业资格(中级)《公司信贷》考试多选题题库及答案解析
- 重庆三峡学院《巧固球》2023-2024学年第一学期期末试卷
- 重庆人文科技学院《国际法》2022-2023学年期末试卷
- 重庆人文科技学院《风景园林设计》2022-2023学年第一学期期末试卷
- 重庆三峡学院《化工过程分析与合成》2022-2023学年第一学期期末试卷
- 安全员、消防员内务管理规程
- 重庆三峡学院《钢结构原理》2023-2024学年第一学期期末试卷
- 重庆三峡学院《电气测试技术综合设计》2022-2023学年期末试卷
- 重庆人文科技学院《史记》2023-2024学年第一学期期末试卷
- J1113压铸机操作规程
- 二年级语文上册 第八单元 集体备课+教材分析
- 2022秋国开农村社会学形考任务3试题及答案
- 《劳动关系协调员》教学计划及教学大纲
- 中国历史文化名城-南京课件
- 城市桥梁安全性评估规程DB50-T 273-2021
- 尾矿库在线自动监测系统解决预案
- 文华财经期货软件指标公式源码至尊波段王指标公式源码
- 运动中的攻击行为课件
- 《闪闪的红星》阅读题(答案全,内容新)
- 班主任治班策略课件
- 《孤独的小螃蟹》读书交流会
评论
0/150
提交评论