SpringMvc之自定義檢視
阿新 • • 發佈:2018-12-13
嗯,在學習之前得想一想自定義檢視存在的意義是什麼,有什麼作用,什麼時候用到自定義檢視???
在我們能要提交一個表單時,需要將內容用Excel匯出,這個時候SpringMvc就提供一個介面 AbstractExcelView
那怎樣定義一個簡單的自定義檢視
第一部:新建一個HelloView.java並且實現View介面
package com.sgf.springmvc.view; import java.util.Date; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.servlet.View; @Component public class HelloView implements View{ /* 檢視型別*/ @Override public String getContentType() { // TODO Auto-generated method stub return "text/html"; } /* 渲染檢視*/ @Override public void render(Map<String, ?> arg0, HttpServletRequest arg1, HttpServletResponse arg2) throws Exception { arg2.getWriter().print("hello view,time"+new Date()); } }
然後在SpringMvc配置檔案中配置自定義檢視解析器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自動掃描的包 --> <context:component-scan base-package="com.sgf.springmvc"></context:component-scan> <!--配置檢視解析器:如何把handler方法的返回值解析為實際的物理檢視 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置一個檢視解析器 --> <!-- 配置檢視 BeanNameViewResolver 解析器: 使用檢視的名字來解析檢視 --> <!-- 通過 order 屬性來定義檢視解析器的優先順序, order 值越小優先順序越高 --> <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"> <property name="order" value="100"></property> </bean> <!-- 配置直接轉發的頁面 --> <!-- 可以直接相應轉發的頁面, 而無需再經過 Handler 的方法. --> <mvc:view-controller path="/success" view-name="success"/> <!-- 在實際開發中通常都需配置 mvc:annotation-driven 標籤 --> <mvc:annotation-driven></mvc:annotation-driven> </beans>
那麼兩個檢視解析器會先執行哪個??通過 order 屬性來定義檢視解析器的優先順序, order 值越小優先順序越高。而第一個檢視解析器的預設order為Integer的最大值,也就是說只要你給另一個試圖解析器添加了order屬性值,他就最後一個執行。而佟剛老師舉得例子很形象,更好理解:把兩個配置器比喻成飯館,InternalResourceViewResolver這個檢視解析器就好比你經常去吃的那個飯館,而BeanNameViewResolver檢視解析器就如同新開的,那麼你總想嚐嚐鮮,也就跟選擇檢視解析器一樣,選擇比較新鮮的去嘗試一下。
再在測試方法中寫測試方法
package com.sgf.springmvc.handlers; import java.util.Date; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.Mapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; @Controller public class HelloWorld { @RequestMapping("testView") public String testView() { System.out.println("testView"); return "helloView"; } }
return 則為類名首字母的小寫。return "helloView";
檢視解析器就會去找相應的檢視。我們自定義的檢視是HelloView,spring容器幫我們例項物件的時候,首字母會小寫,即 HelloView helloView = new HelloView()
在jsp頁面新增
便可訪問到我們自己定義的檢視