1. 程式人生 > >springmvc設定多個檢視器時優先順序低的檢視解析器無效問題

springmvc設定多個檢視器時優先順序低的檢視解析器無效問題

再做頁面靜態化處理時,有時候我們需要 兩種或者兩種以上的檢視解析方式,比如 jsp,html,json,jstl,ftl等等,顯然預設的 springmvc 只配置一種檢視解析方式是滿足不了我們的,但是放心,springmvc提供了配置多檢視解析的方式:

比如:一種檢視解析用來 解析 freemarker靜態化後的html,另一種檢視解析用來解析 jsp(jstl)

網上好多方式都有提到用 order 來設定解析器的優先順序,但經試驗,優先順序低的還是生效不了,不知道是否有其他的解決方法?最終檢視原始碼才發現原來springmvc 只給我們提供了 待我們重寫的方法,看原始碼:

/*** Eclipse Class Decompiler plugin, copyright (c) 2012 Chao Chen (
[email protected]
) ***/ package org.springframework.web.servlet.view; import java.util.Locale; import org.springframework.beans.factory.InitializingBean; public abstract class AbstractUrlBasedView extends AbstractView implements InitializingBean { private String url; protected AbstractUrlBasedView() { } protected AbstractUrlBasedView(String url) { this.url = url; } public void setUrl(String url) { this.url = url; } public String getUrl() { return this.url; } public void afterPropertiesSet() throws Exception { if ((isUrlRequired()) && (getUrl() == null)) throw new IllegalArgumentException("Property 'url' is required"); } protected boolean isUrlRequired() { return true; } <span style="background-color: rgb(255, 255, 204);">public boolean checkResource(Locale locale) throws Exception { return true; } public String toString() { StringBuilder sb = new StringBuilder(super.toString()); sb.append("; URL [").append(getUrl()).append("]"); return sb.toString(); } }

所以怎麼做就很明確了:

第一步:新建一個html的解析器並繼承 InternalResourceView 後重寫 checkResource

 package com.izhbg.typz.common.springmvc.view;
 import java.io.File;
 import java.util.Locale;
 import org.springframework.web.servlet.view.InternalResourceView;

 /**
 *
 * @ClassName: HtmlResourceView
 * @author caixl
 * @date 2016-6-8 上午11:01:41
 *
 */
 
 public class HtmlResourceView extends InternalResourceView {
 @Override
 public boolean checkResource(Locale locale) {
 File file = new File(this.getServletContext().getRealPath("/") + getUrl());
 return file.exists();// 判斷該頁面是否存在
 
 }
 
 }

第二步:在xml配置檔案中 指定解析器的 viewClass為該解析類​​​​​​​

 <!-- 定義HTML檔案的位置 -->
 
 <bean id="htmlviewResolver"
 
 class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 
 <property name="viewClass" value="com.izhbg.typz.common.springmvc.view.HtmlResourceView"/>
 
 <property name="order" value="0" />
 
 <property name="prefix" value="/cms/"/>
 
 <property name="suffix" value=".html" />
 
 <property name="contentType" value="text/html;charset=UTF-8"></property>
 
 </bean>
 
 <!-- 定義JSP檔案的位置 -->
 
 <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 
 <property name="order" value="1" />
 
 <property name="prefix" value="/views/"/>
 
 <property name="suffix" value=".jsp"/>
 
 </bean>

原始碼可參考 開源專案:https://github.com/izhbg/typz

相關推薦

springmvc設定檢視優先順序檢視解析無效問題

再做頁面靜態化處理時,有時候我們需要 兩種或者兩種以上的檢視解析方式,比如 jsp,html,json,jstl,ftl等等,顯然預設的 springmvc 只配置一種檢視解析方式是滿足不了我們的,但是放心,springmvc提供了配置多檢視解析的方式: 比如:一種檢視

Android AlarmManager設定定時事件只最後一個有效問題解決

最近用到了AlarmManager,遇到了問題,當我設定多個定時器時,發現只有一個起作用,百思不得其解,後來在網上找到了原因,把人家的解決辦法貼上: AlarmManager的常用方法有三個: (1)set(int type,long startTime,Pending

HTML中設定class屬性的優先順序

問題在編寫html的過程中,我們會經常為class屬性定義多個值,但是同樣會經常發現自己定義的值無效!!!以前碰到這種情況我就直接重寫了,或者直接用id設定css屬性,今天想起來好像有些不對哦。。。我必須得去發現真理!!!<div id="p" class="middl

在LNMP環境下創建虛擬主機出現nginx無法解析php文件故障

php nginx 下載 問題描述: 搭建的LNMP環境運行php文件時,每次通過瀏覽器打開總是直接將文件下載到本地,而無法通過瀏覽器正常顯示,而對於html文件則可以正常使用。 具體配置如下: location ~ \.php$ { r

SpringMVC 配置檢視解析遇到的問題

轉自:https://www.cnblogs.com/daxin/p/3551537.html SpringMVC 多檢視解析器配置以及問題 在SpringMVC模式當中可以通過如下配置來支援多檢視解析 <bean id="JSPViewResolver" class=

SpringMVC配置模板檢視解析

之前在Spring MVC的Web工程下配置了多個檢視解析器,但只生效了一個。重新研究了下,這裡介紹了了同時配置velocity和html和jsp三種模板檢視解析器。 詳細配置方法見程式碼: <!-- 3:配置多個ViewResolver檢視解

Java 《Effective Java 中文版 第2版》學習筆記 遇到構造要考慮用構建

fec 利用 客戶端代碼 except car beans pri 很好 種類   靜態工廠和構造器有個共同的局限性:它們都不能很好地擴展到大量的可選參數。   當一個類中有若幹個必選屬性和多個可選屬性時,采用重疊構造器模式、JavaBeans模式或者Builder模式,但

VirtualBox虛擬機器網路設定

環境:主機Win7 + VirtualBox + Ubuntu14.04 + Ubuntu16.04       使用VirtualBox安裝虛擬機器時,網路配置我們一般選擇雙網絡卡,一個用於虛擬機器與外部通訊(NAT),另一個用於與主機通訊(Host-Only),通過Vir

HTML中設定class屬性css的優先順序,css樣式覆蓋

https://blog.csdn.net/u011320646/article/details/18152857 https://www.w3cschool.cn/codecamp/overri

迴圈中設定條件的問題(邏輯與,邏輯或,運算子優先順序

 迴圈中設定多個條件,有時會得不到自己期望的結果,下面是我對運算子優先順序不清楚,造成的錯誤總結: 1 <script type="text/javascript"> 2 var str = prompt("你愛我嗎?"); 3 while(str != "我愛你" &

在GET方式下,有參數的處理

body getname ron 自動 arr tro rest 封裝 from 在一個查詢接口中,需要的參數比較多,如果還是使用GET方式進行請求的話,那麽,Controller 中的方法的參數列表將會非常多,如: public List<String> g

[原]配置密鑰免密碼登錄服務簡明教程

git user 免密碼登錄 可能 編輯 cati 端口 color 賬戶 客戶端:MacOS 服務端:CentOS 其他系統操作類似。 1. 客戶端生成密鑰。 ssh-keygen -t rsa -C "mac" * -C 是註釋的意思,如果你有多個密鑰,價格註釋

[轉]ajax請求控制執行順序或全部執行後的操作

on() .when ati ack login tps als fun lan 本文轉自:https://blog.csdn.net/fsdad/article/details/71514822 一、當確保執行順序時: 1、 請求加async: false,,

feign 發送請求,傳參數的寫法

method 接受 public ati -s state dna www. orm 第一:傳參方式寫法,當參數個數大於2個時,需要用@RequestParam @PostMapping(value = "/configReader/configValue.do",hea

設定div並列顯示

有兩個屬性可以用到:一個是float,另一個是display   用法: <div>我是第一個div</div> <div>我是第二個div</div> 設定css樣式: <style> div{flo

在同一個tomcat下部署springboot專案,springboot專案無法正常啟動的問題

這個問題是基於,不使用springboot內建的tomcat會產生(即使用自己的tomcat時)。 今天在部署springboot專案的時候遇到了一個問題,怎麼部署都訪問不了,在網上查了很多原因,什麼pom.xml中依賴沒加,或者依賴衝突等等 各種原因都試了 ,結果還是訪問不了,這就

一個頁面有script標籤,執行順序

JavaScript直譯器在執行指令碼時,是按塊執行的。通俗地說,就是瀏覽器在解析HTML文件流時,如果遇到一個script標籤,則JavaScript直譯器會等到這個程式碼塊都載入完成後,先對程式碼塊進行預編譯,然後再執行。執行完畢後,瀏覽器會繼續解析下面的HTML文件流,同時JavaSc

16-GPRS(Air202)關於檔案中的變數呼叫和定時

https://www.cnblogs.com/yangfengwu/p/9968405.html 因為自己看到好多問多個檔案呼叫的,感覺這個應該說一說 對了大家有沒有知道這個是幹什麼的    大家有沒有看這篇 https://www.cnblogs.com/yang

一個表單中有相同的欄位,以及springmvc接收相同物件問題

                                      &

element UI 中 el-form 表單包含 el-input 的校驗方法

這一點element-ui真是有點死板,我是這樣解決的,有兩個情況,prop可以只繫結第一個input的,第二個input寫上ref屬性,驗證的rules中寫一個方法,這個方法驗證第一個input框的同時,通過 this.$refs.xxx.value的形式獲取第二個input框值,只要這兩