ModelAndView
的視圖解析器可以通過多種方式進行配置,具體取決于你使用的視圖解析器類型。以下是一些常見的視圖解析器及其配置方法:
InternalResourceViewResolver
是 Spring MVC 內置的視圖解析器,用于解析基于 classpath
的視圖名稱。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
在這個示例中,視圖名稱會被解析為 /WEB-INF/views/
目錄下的文件,文件擴展名為 .jsp
。
Thymeleaf 是一個現代的服務器端 Java 模板引擎,可以與 Spring MVC無縫集成。
<bean id="templateResolver" class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".html"/>
<property name="templateMode" value="HTML"/>
</bean>
<bean id="templateEngine" class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine"/>
</bean>
在這個示例中,Thymeleaf 視圖名稱會被解析為 /WEB-INF/templates/
目錄下的文件,文件擴展名為 .html
。
FreeMarker 是一個流行的模板引擎,也可以與 Spring MVC集成。
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/views/"/>
</bean>
<bean id="freeMarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true"/>
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".ftl"/>
</bean>
在這個示例中,FreeMarker 視圖名稱會被解析為 /WEB-INF/views/
目錄下的文件,文件擴展名為 .ftl
。
JSP(JavaServer Pages)也可以作為視圖解析器使用。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
在這個示例中,JSP 視圖名稱會被解析為 /WEB-INF/views/
目錄下的文件,文件擴展名為 .jsp
。
請注意,這些示例都是基于 XML 配置的。如果你使用 Java 配置,你可以使用相應的注解來配置視圖解析器。例如,對于 InternalResourceViewResolver
,你可以使用 @Bean
注解來定義它:
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}