Spring MVC 多檢視解析器
阿新 • • 發佈:2018-12-19
第一步:匯入jar freemarker-2.3.23.jar spring-context-support-4.0.4.RELEASE.jar
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.0.4.RELEASE</version> </dependency>
第二步:配置檔案配置
<!-- html檢視解析器 必須先配置freemarkerConfig,注意html是沒有prefix字首屬性的--> <bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"> <!--模板路徑,相當於字首--> <property name="templateLoaderPath"> <value>/WEB-INF/htmls/</value> </property> </bean> <bean id="htmlviewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver"> <property name="contentType" value="text/html;charset=UTF-8"></property> <property name="cache" value="true"/> <!--字尾,沒有字首屬性--> <property name="suffix" value=".html" /> <!--優先級別,越小級別越高--> <property name="order" value="0"/> </bean> <!--配置檢視解析器,不同包可以建多個解析器,用viewNames屬性區分:匹配檢視名以jpg開頭的。--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="application/xml"/> <property name="viewNames" value="htmls*"/> <!--字首--> <property name="prefix" value="/WEB-INF/"/> <!--字尾--> <property name="suffix" value=".jsp"/> <property name="order" value="1"/> </bean> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="contentType" value="text/html;charset=UTF-8"/> <property name="viewNames" value="jsp*"/> <!--字首--> <property name="prefix" value="/WEB-INF/"/> <!--字尾--> <property name="suffix" value=".jsp"/> <property name="order" value="2"/> </bean>
首先可以使用order屬性進行設定 系統首先按解析器的order值進行查詢 首先使用FreeMarkerViewResolver解析器呼叫canHandle方法,判斷當前解析器對檢視是否能夠解析。如不能解析在依次呼叫。
我這有兩個JSP檔案:因為不同包,所以就多配一個InternalResourceViewResolver解析器
1 WEB-INF/htmls/a.jsp
2 WEB-INF/jsp/b.jsp
**注意:**要新增viewNames屬性,以分別匹配不同的包。因為InternalResourceViewResolver其有一個buildView方法,該方法一定會建立一個View;所以呢View永遠不為null(即使該jsp不存在);
<property name="viewNames" value="htmls*"/>
<property name="viewNames" value="jsp*"/>
如上兩個的意思是對htmls或jsp開頭的檢視名進行處理,比如返回的檢視名為htmls/a 那麼會交給viewNames為htmls*的那個解析器處理;