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则会直接将逻辑视图映射。
配置视图解析器如下:
在这里插入图片描述
在这里插入图片描述
需要使用JSTL标签来处理格式化和信息,希望Resolver将视图解析为JstlView。JstlView需要一个Locale,获得地域信息,信息标签可以借助Spring的信息资源和Locale,从而选择适当的信息渲染到Html中。需要渲染为JstlView则需要设置viewClass。
在这里插入图片描述

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:form可以通过commandName属性构建对某个模型对象的上下文信息。如下,则必须返回一个key为spitter的对象。sf:input标签中的path属性将会被设置成原来的value,sf:errors可以用于展示错误信息等
在这里插入图片描述
Spring通用的标签库:
要使用通用标签库,必须先声明
<%@ taglib prefix=“s” uri=“http://www.springframework.org/tags” %>
其中,比较有用的是
·<s:escapeBody>将标签内的内容进行HTML和/或JavaScript转义
·<s:message>根据给定的编码获取信息
·<s:url> 创建相对于上下文的URL

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

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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值