有的時候 SpringMVC 框架提供的視圖解析器不能滿足我們的需求,這時候我們可以來自定義視圖以及視圖解析器來完成定製的功能。 主要分為以下三步: 編寫自定義視圖實現類 編寫視圖解析器 在配置文件中將自定義的視圖解析器註入ioc容器中 1、編寫自定義視圖實現類: 2、編寫視圖解析器: 3、在配置文 ...
有的時候 SpringMVC 框架提供的視圖解析器不能滿足我們的需求,這時候我們可以來自定義視圖以及視圖解析器來完成定製的功能。
主要分為以下三步:
- 編寫自定義視圖實現類
- 編寫視圖解析器
- 在配置文件中將自定義的視圖解析器註入ioc容器中
1、編寫自定義視圖實現類:
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.View;
// 實現 View 介面才能讓框架知道這是一個視圖
public class MyView implements View {
@Override
public String getContentType() {
return "text/html";
}
@Override
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
// 編寫渲染視圖頁面的業務邏輯
// 可以在這裡取得 model 中保存的數據
// 可以使用 request 和 response 進行請求和響應
}
}
2、編寫視圖解析器:
import java.util.Locale;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
// 實現 ViewResolver 介面來讓框架知道這是一個視圖解析器,實現 Ordered 介面來進行排序
public class MyViewResolver implements ViewResolver, Ordered {
// 視圖解析器的遍歷順序
private Integer order;
@Override
public int getOrder() {
return order;
}
// 設置視圖解析器的遍歷順序
public void setOrder(Integer order) {
this.order = order;
}
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
// 進行視圖解析器的業務邏輯,返回視圖對象則進行渲染,若返回 null 則繼續遍歷下一個視圖解析器
if (viewName.startsWith("myView:")) {
return new MyView();
}
return null;
}
}
3、在配置文件中將自定義的視圖解析器註入ioc容器中:
<bean class="com.pudding.view.MyViewResolver">
// order的值越小優先順序越高,InternalResourceViewResolver 的 order 值為 Integer 的最大值。
<property name="order" value="1"></property>
</bean>