spring設置多個ViewResolver

ViewResolver用來解析視圖文件,如常用的jsp類型的文件。

<bean id ="jspViewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver" >
       <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> -->
       <property name ="prefix" value="" />
       <property name ="suffix" value="" />
</bean >

spring中可以配置多個視圖解析類,用來解析不同類型的文件。
其中各個解析類的調用順序和屬性order有關,order值小的先進性解析,如果解析失敗則調用下一個解析類。

以jsp解析類InternalResourceViewResolver爲例。
所有的解析類要繼承UrlBasedViewResolver,幾個重要的屬性:

private Class<?> viewClass;

private String prefix = "";

private String suffix = "";

private int order = Integer.MAX_VALUE;

其中viewClass如果不配置的話,會調用子類的requiredViewClass方法

public void setViewClass(Class<?> viewClass) {
    if (viewClass == null || !requiredViewClass().isAssignableFrom(viewClass)) {
        throw new IllegalArgumentException(
                "Given view class [" + (viewClass != null ? viewClass.getName() : null) +
                "] is not of type [" + requiredViewClass().getName() + "]");
    }
    this.viewClass = viewClass;
}

然後看中InternalResourceViewResolver的方法

public InternalResourceViewResolver() {
    Class<?> viewClass = requiredViewClass();
    if (InternalResourceView.class == viewClass && jstlPresent) {
        viewClass = JstlView.class;
    }
    setViewClass(viewClass);
}


/**
 * This resolver requires {@link InternalResourceView}.
 */
@Override
protected Class<?> requiredViewClass() {
    return InternalResourceView.class;// 默認用該類去解析文件
}

解析文件的大概流程就是這樣,改天試試自己寫一個解析文件的實現。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章