SpringInAction第六章学习笔记:SpringMVC视图

第六章:渲染Web视图

6.1理解视图解析
将控制器中请求处理的逻辑和视图中的渲染实现解耦是SpringMVC的一个重要特性。
SpringMVC定义了一个名为ViewResolver的接口,给其中的resolveViewName()传入视图名和Locale对象时,将返回一个View实例。
View是另一个接口,任务为接受模型以及Servlet的request和response对象,并将输出结果渲染到response中。

Spring提供了多个内置视图解析器的实现:
•BeanNameViewResolver 将视图解析为Spring应用上下文中的bean,其中bean的ID与视图的名字相同。
•ContentNegotiatingViewResolver 通过考虑客户端需要的内容类型来解析视图,委托给另外一个能够产生对应内容类型的视图解析器
FreeMarkerViewResolver 将视图解析为FreeMarker模板
InternalResourceViewResolver 将视图解析为Web应用的内部资源(一般为JSP)
•JasperReportsViewResolver 将视图解析为JasperReports定义
•ResourceBundleViewResolver 将视图解析为资源bundle(一般为属性文件)
TilesViewResolver 将视图解析为Apache Tile定义
•UrlBasedViewResolver 直接根据视图的名称解析视图,视图的名称会匹配一个物理视图
•VelocityLayoutViewResolver 将视图解析为Velocity布局,从不同的模板中组合页面
VelocityViewResolver 将视图解析为Velocity模板
•XmlViewResolver 将视图解析为特定XML文件中的bean定义。类似于BeanNameViewResolver
•XsltViewResolver 将视图解析为XSLT转换后的结果

6.2创建JSP视图
JSP还是占据主导地位。JSP包含了对表达式语言和自定义标签库的支持。
Spring提供了两种支持JSP视图的方式:
•InternalResourceViewResolver会将视图名解析为JSP文件。如果使用了JSTL的话,能将视图名解析为JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting)和信息(message)标签。(可以实现国际化等)
•Spring提供了两个JSP标签库,一个用于表单到模型的绑定,另一个提供了通用的工具类特性。

1、配置适用于JSP的视图解析器
InternalResourceViewResolver会遵循前缀和后缀的约定,自动在视图名上面补全,确定一个Web应用中视图资源的物理路径。其他的解析器例如ResourceBundleViewResolver则会直接将逻辑视图映射。
配置视图解析器如下:
SpringInAction第六章学习笔记:SpringMVC视图_第1张图片
SpringInAction第六章学习笔记:SpringMVC视图_第2张图片
需要使用JSTL标签来处理格式化和信息,希望Resolver将视图解析为JstlView。JstlView需要一个Locale,获得地域信息,信息标签可以借助Spring的信息资源和Locale,从而选择适当的信息渲染到Html中。需要渲染为JstlView则需要设置viewClass。
SpringInAction第六章学习笔记:SpringMVC视图_第3张图片

2、使用Spring的JSP库
Spring提供了两个JSP标签库,一个用来渲染HTML表单标签,另一个包含了一些工具类标签。
Spring的表单绑定JSP标签:
与原生Html标签的区别在于它们会绑定模型中的一个对象,根据模型中对象的属性填充值。需要先在JSP中声明标签库:
<%@ taglib prefix=“sf” uri=“http://www.springframework.org/tags/form” %>
包含14个相关标签
·sf:checkbox渲染成一个HTML标签,type属性为checkbox
·sf:checkboxes渲染成多个HTML checkbox
·sf:errors在一个中渲染输入域错误
·sf:form渲染成一个并为其内部标签暴露绑定路径,用于数据绑定
·sf:hidden渲染成一个 type为hidden
·sf:input渲染成 type为text
·sf:label渲染成
·sf:option渲染成一个元素,selected属性根据所绑定的值继续设置
·sf:options按照绑定的集合数组或Map渲染成一个列表
·sf:password渲染成 password
·sf:radiobutton渲染成 radio
·sf:radiobuttons渲染成多个 radio
·sf:select 渲染成
·sf:textarea渲染成标签

sf:form可以通过commandName属性构建对某个模型对象的上下文信息。如下,则必须返回一个key为spitter的对象。sf:input标签中的path属性将会被设置成原来的value,sf:errors可以用于展示错误信息等
SpringInAction第六章学习笔记:SpringMVC视图_第4张图片
Spring通用的标签库:
要使用通用标签库,必须先声明
<%@ taglib prefix=“s” uri=“http://www.springframework.org/tags” %>
其中,比较有用的是
·将标签内的内容进行HTML和/或JavaScript转义
·根据给定的编码获取信息
· 创建相对于上下文的URL

实现国际化:Spring有多个信息源类,都实现了MessageSource接口。常用的是ResourceBundleMessageSource,从一个属性文件加载信息(通过baseName设置属性文件的位置)。如下:此时属性文件放置再resources/i18n下的message.properties。在JSP上,使用格式化文字。
SpringInAction第六章学习笔记:SpringMVC视图_第5张图片
创建URL
可以创建URL后,渲染到响应或者赋值给一个变量。会自动接受一个相对于Servlet
上下文的URL,并在渲染的时候预先加上。可以通过scope属性更改其作用域。

转义内容
标签可以用于将内容进行转义,通过设置javaScriptEscape属性可以转义js

6.3使用ApacheTiles视图定义布局
如果想复用页面,例如复用页面的头和尾,可以使用布局引擎,如Apache Tiles,定义适用于所有页面的通用页面布局。SpringMVC以视图解析器的形式为ApacheTiles提供了支持。
如下在WebConfig配置视图解析器,TilesConfigurer会加载Tile定义并与ApacheTiles协作,而TilesViewResolver会见逻辑视图名称解析为引用Tile定义的视图。
SpringInAction第六章学习笔记:SpringMVC视图_第6张图片
定义tiles.xml如下,先定义一个基础,包含头和尾,其他页面继承此基础,其他页面通过插入头
SpringInAction第六章学习笔记:SpringMVC视图_第7张图片
6.4使用Thymeleaf
Thymeleaf是原生的,不依赖于标签库,能在接受原始HTML的地方进行编辑和渲染。
1、配置Thymeleaf视图解析器
需要启动三个与Spring相关的bean
·ThymeleafViewResolver:将视图名称解析为Thymeleaf视图
·SpringTemplateEngine:处理模板并渲染结果
·TemplateResolver:加载Thymeleaf模板
导入POM
SpringInAction第六章学习笔记:SpringMVC视图_第8张图片
配置如下:
SpringInAction第六章学习笔记:SpringMVC视图_第9张图片
ThymeleafViewResolver是SpringMVC中ViewResolver的一个实现类,将逻辑视图名称解析
为视图,视图为一个Thymeleaf模板。SpringTemplateEngine会再Spring中启用Thymeleaf
引擎用来解析模板,并基于模板渲染结果。TemplateResolver会最终定位和查找模板。
编写Thymeleaf模板如下:
SpringInAction第六章学习笔记:SpringMVC视图_第10张图片
唯一的区别在于th:href可以包含Thymeleaf表达式,用来计算动态的值。其中用到了@{}表达式,用来计算相对于URL的路径。Thymeleaf与JSP不同,可以按照原始的HTML方式进行编辑甚至渲染。一个例子如下,更多详细资料仍需进一步学习。
在这里插入图片描述

你可能感兴趣的:(SpringInAction)