一、创建JSP视图
- spring提供了两种支持jsp视图的方式:
- InternalResourceViewResolver
- InternalResourceViewResolver会将视图名解析为JSP文件
- 如果JSP页面中使用了JSP标准标签库(JavaServer Pages Standard Tag Library, JSTL) 的话, InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件, 从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting) 和信息(message) 标签。
- Spring
- Spring提供了两个JSP标签库, 一个用于表单到模型的绑定, 另一个提供了通用的工具类特性。
- 配置适用于JSP的视图解析器
- java方式
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; }
- xml方式
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> </beans:bean>
- home将会解析为“/WEB-INF/views/home.jsp”
- productList将会解析为“/WEB-INF/views/productList.jsp”
- books/detail将会解析为“/WEB-INF/views/books/detail.jsp”
- 解析JSTL视图
使用JSTL标签来处理格式化和信息,需要InternalResourceViewResolver将视图解析为JstlView,这需要设置InternalResourceViewResolver的viewClass属性:
- java方式
@Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class); return resolver; }
- xml方式
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <beans:property name="prefix" value="/WEB-INF/views/" /> <beans:property name="suffix" value=".jsp" /> <beans:property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> </beans:bean>
4.使用spring的jsp库
-
将表单绑定到模型上
Spring的表单绑定jsp标签库包含了14个标签,它们中的大多数都用来渲染HTML中的表单标签。为了使用它们,需要在jsp页面中对其进行声明:
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
如果在模型中Spitter对象的firstName属性值为Jack, 那么<sf:input path="firstName"/>所渲染的<input>标签中, 会存在value="Jack"。展现错误
<sf:errors path="*" element="div" cssClass="errors" /> -
spring通用的标签库
要使用Spring通用的标签库, 我们必须要在页面上对其进行声明:
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>展现国际化信息 借助<s:message>来渲染文本 <s:message code="spitter.welcome" text="Welcome" /> <s:message>将会根据key为spittr.welcome的信息源来渲染文本。
配置信息源: spring中实现了MessageSource接口的类可以配置信息源,常用的有ResourceBundleMessageSource 和ReloadableResourceBundleMessageSource java代码: @Bean public MessageSource messageSource() { ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource(); //ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); messageSource.setBasename("classpath:///messages"); messageSource.setCacheSeconds(10); return messageSource; }
创建URL <s:url>及<s:param>的用法见p229页
转义内容 <s:escapeBody>标签是一个通用的转义标签。它会渲染标签体中内嵌的内容, 并且在必要的时候进行转义: <s:escapeBody javaScriptEscape="true"> <h1>Hello</h1> </s:escapeBody> <s:escapeBody htmlEscape="true"> <h1>Hello</h1> </s:escapeBody>
二、使用Apache Tiles视图定义布局
- 配置
- 使用
三、使用Thymeleaf
- 配置
- 在spring中配置三个bean:
ThymeleafViewResolver:将逻辑视图名称解析为Thymeleaf模板视图;
SpringTemplateEngine:处理模板并渲染结果;
TemplateResolver:加载Thymeleaf模板。 - java配置
@Bean public ViewResolver viewResolver(SpringTemplateEngine templateEngine) { ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); viewResolver.setTemplateEngine(templateEngine); return viewResolver; } @Bean public SpringTemplateEngine templateEngine(TemplateResolver templateResolver) { SpringTemplateEngine templateEngine = new SpringTemplateEngine(); templateEngine.setTemplateResolver(templateResolver); return templateEngine; } @Bean public TemplateResolver templateResolver() { TemplateResolver templateResolver = new ServletContextTemplateResolver(); templateResolver.setPrefix("/WEB-INF/views/"); templateResolver.setSuffix(".html"); templateResolver.setTemplateMode("HTML5"); return templateResolver; }
- xml配置
xml配置Thymeleaf
- 使用
略...见p240
网友评论