Spring MVC开发技术指南第5章 数据绑定和表单标签库_第1页
Spring MVC开发技术指南第5章 数据绑定和表单标签库_第2页
Spring MVC开发技术指南第5章 数据绑定和表单标签库_第3页
Spring MVC开发技术指南第5章 数据绑定和表单标签库_第4页
Spring MVC开发技术指南第5章 数据绑定和表单标签库_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章数据绑定和表单标签库主要内容

数据绑定

表单标签库

数据绑定应用JSON数据交互5.1数据绑定

在SpringMVC框架中,数据绑定有以下几层含义:绑定请求参数输入值到领域模型(如3.2节)、模型数据到视图的绑定(输入验证失败时)、模型数据到表单元素的绑定(如下拉列表选项值由控制器初始化)。主要内容

数据绑定

表单标签库

数据绑定应用JSON数据交互5.2Spring的表单标签库JSP页面使用Spring表单标签库时,必须在JSP页面开头处声明taglib指令,指令代码如下:<%@taglibprefix="form"uri="/tags/form"%>5.2.1表单标签<form:formmodelAttribute="xxx"method="post"action="xxx">

……</form:form>modelAttribute:暴露formbackingobject的模型属性名称,缺省为command。@RequestMapping(value="/input")publicStringinputUser(Modelmodel){ ……

model.addAttribute("user",newUser());return"userAdd";}<form:formmodelAttribute="user"method="post"action="user/save">

…… </form:form>5.2.2input标签input标签,语法格式如下:<form:inputpath="xxx"/>path属性将文本框输入值绑定到formbackingobject的一个属性。5.2.3password标签5.2.4hidden标签5.2.5textarea标签5.2.6checkbox标签checkbox标签,语法格式如下:

<form:checkboxpath="xxx"value="xxx"/>

多个path相同的checkbox标签,它们是一个选项组,允许多选。选项值绑定到一个数组属性。示例代码如下:<form:checkboxpath="friends"value="张三"/>张三<form:checkboxpath="friends"value="李四"/>李四<form:checkboxpath="friends"value="王五"/>王五<form:checkboxpath="friends"value="赵六"/>赵六5.2.7checkboxes标签checkboxes标签渲染多个复选框,是一个选项组,等价于多个path相同的checkbox标签。它有3个非常重要的属性:items、itemLabel和itemValue。

items:用于生成input元素的Collection、Map或Array。

itemLabel:items属性中指定的集合对象的属性,为每个input元素提供label。

itemValue:items属性中指定的集合对象的属性,为每个input元素提供value。checkboxes标签语法格式如下:

<form:checkboxesitems="xxx"path="xxx"/>示例代码如下:

<form:checkboxesitems="${hobbys}"path="hobby"/>5.2.8radiobutton标签radiobutton标签,语法格式如下:<form:radiobuttonpath="xxx"value="xxx"/>

多个path相同的radiobutton标签,它们是一个选项组,只允许单选。5.2.9radiobuttons标签radiobuttons标签渲染多个radio,是一个选项组,等价于多个path相同的radiobutton标签。radiobuttons标签,语法格式如下:

<form:radiobuttonspath="xxx"items="xxx"/>

该标签的itemLabel和itemValue属性与checkboxes标签的itemLabel和itemValue属性完全一样,但只允许单选。5.2.10select标签 <form:selectpath="xxx"items="xxx"/>或 <form:selectpath="xxx"> <optionvalue="xxx">xxx</option> </form:select>或 <form:selectpath="xxx"><form:optionsitems="xxx"/> </form:select>

该标签的itemLabel和itemValue属性与checkboxes标签的itemLabel和itemValue属性完全一样。5.2.11options标签options标签生成一个select标签的选项列表。因此,需要与select标签一同使用,具体用法参见5.2.10select标签。5.2.12errors标签errors标签渲染一个或者多个span元素,每个span元素包含一个错误消息。它可以用于显示一个特定的错误消息,也可以显示所有错误消息。语法如下:

<form:errorspath="*"/>或

<form:errorspath="xxx"/>

其中,“*”表示显示所有错误消息;“xxx”表示显示由“xxx”指定的特定错误消息。主要内容

数据绑定

表单标签库

数据绑定应用JSON数据交互5.3数据绑定应用

【例5-1】ch5_1应用中实现了User类属性和JSP页面中表单参数的绑定,同时在JSP页面中分别展示了input、textarea、checkbox、checkboxs、select等标签。5.3.1创建Maven项目并添加相关依赖

在ch5_1应用中需要使用JSTL,因此,不仅需要将SpringMVC相关依赖添加到pom.xml文件中,还需要将JSTL相关依赖添加到pom.xml文件中。5.3.2SpringMVC及Web相关配置@Configuration@EnableWebMvc//开启springmvc的支持@ComponentScan(basePackages={"controller","service"})//扫描基本包publicclassSpringMVCConfigimplementsWebMvcConfigurer{ /** *配置视图解析器 */ @Bean publicInternalResourceViewResolvergetViewResolver(){ InternalResourceViewResolverviewResolver=newInternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/jsp/"); viewResolver.setSuffix(".jsp"); returnviewResolver; }} /** *注册SpringMVC的DispatcherServlet */Dynamicservlet=arg0.addServlet("dispatcher",newDispatcherServlet(ctx)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); /** *注册字符编码过滤器 */ javax.servlet.FilterRegistration.Dynamicfilter=arg0.addFilter("characterEncodingFilter",CharacterEncodingFilter.class); filter.setInitParameter("encoding","UTF-8"); filter.addMappingForUrlPatterns(null,false,"/*");5.3.3领域模型publicclassUser{ privateStringuserName; privateString[]hobby;//兴趣爱好 privateString[]friends;//朋友 privateStringcarrer; privateStringhouseRegister; privateStringremark; //省略setter和getter方法}5.3.3Service层

应用中使用了Service层,在Service层使用静态集合变量users模拟数据库存储用户信息,包括添加用户和查询用户两个功能方法。5.3.4Controller层

在Controller类UserController中定义了请求处理方法,其中包括处理user/input请求的inputUser方法,以及user/save请求的addUser方法,其中在addUser方法中用到了重定向。在UserController类中,通过@Autowired注解在UserController对象中主动注入UserService对象,实现对user对象的添加和查询等操作;通过model的addAttribute方法将User类对象、HashMap类型的hobbys对象、String[]类型的carrers对象以及String[]类型的houseRegisters对象传递给View(userAdd.jsp)。5.3.5View层View层包含两个JSP页面,一个是信息输入页面userAdd.jsp,一个是信息显示页面userList.jsp。在ch5_1应用的src/main/webapp/WEB-INF/jsp/目录下,创建此两个JSP页面。5.3.6测试应用发布应用后,通过地址http://localhost:8080/ch5_1/user/input测试应用。主要内容

数据绑定

表单标签库

数据绑定应用JSON数据交互5.5JSON数据交互SpringMVC在数据绑定的过程中,需要对传递数据的格式和类型进行转换,它既可以转换String等类型的数据,也可以转换JSON等其他类型的数据。5.5.1JSON概述JSON(JavaScriptObjectNotation,JS对象标记)是一种轻量级的数据交换格式。它有两种数据结构。1.对象结构2.数组结构1.对象结构{ key1:value1, key2:value2, …}{ "pname":"陈恒", "password":"123456", "page":40}2.数组结构[ value1, value2, …]{ "sno":"201802228888", "sname":"陈恒",

"hobby":["篮球","足球"],

"college":{ "cname":"清华大学", "city":"北京" }}5.5.2JSON数据转换

为实现浏览器与控制器类之间的JSON数据交互,SpringMVC提供了MappingJackson2HttpMessageConverter实现类默认处理JSON格式请求响应。该实现类利用Jackson开源包读写JSON数据,将Java对象转换为JSON对象和XML文档,同时也可以将JSON对象和XML文档转换为Java对象。Jackson开源包及其描述如下。jackson-annotations.jar:JSON转换注解包。jackson-core.jar:JSON转换的核心包。jackson-databind.jar:JSON转换的数据绑定包。

在使用注解开发时,需要用到两个重要的JSON格式转换注解,分别是@RequestBody和@ResponseBody。

@RequestBody:用于将请求体中的数据绑定到方法的形参中,该注解应用在方法的形参上。

@ResponseBody:用于直接返回return对象,该注解应用在方法上。

【例5-2】JSON数据交互。1.创建Maven项目并添加相关依赖

创建Maven项目ch5_2,在ch5_2中需要使用SpringMVC框架进行JSON数据交互。因此,不仅需要将spring-webmvc依赖添加到pom.xml文件中,还需要将JSON相关依赖添加到pom.xml文件中。因为jackson-databind依赖于jackson-core和jackson-annotations,所以,这里只需添加spring-webmvc和jackson-databind依赖。2.SpringMVC及Web相关配置/** *配置静态资源(不需要DispatcherServlet转发的请求) */ @Override publicvoidaddResourceHandlers(ResourceHandlerRegistryregistry){

registry.addResourceHandler("/static/**").addResourceLocations("/static/"); }

在SpringMVC配置类中,除了配置视图解析器,还需要配置不需要DispatcherServlet转发的BootStrap等静态资源。3.创建POJO类publicclassPerson{ privateSt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论