一、創建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