我知道我可以这样在webConfig类中编写:
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
registry.viewResolver(viewResolver);
}
但与此同时 - 我可以用另一种方式写这个:
@Bean(name = "viewResolver")
public ViewResolver getViewResolver() {
InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
哪种方式更好?
以及为什么我不能为freemarker做第一种方法,但可以做第二种方式:
这是正确的:
@Bean(name = "viewResolver")
public ViewResolver getViewResolver() {
FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
viewResolver.setPrefix("");
viewResolver.setSuffix(".ftl");
return viewResolver;
}
@Bean(name = "freemarkerConfig")
public FreeMarkerConfigurer getFreemarkerConfig() {
FreeMarkerConfigurer config = new FreeMarkerConfigurer();
config.setTemplateLoaderPath("/WEB-INF/pages/");
return config;
}
方法方式我不能写,因为我不知道FreeMarkerConfigurer和FreeMarkerViewResolver如何交互...
基本上你的第二个用法不是你应该如何使用ViewResolverRegistry
它有一些方法可以让生活更轻松,比如你应该使用jsp
或freeMarker
。
所以正确的用法是
Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/pages/", ".jsp");
}
和免费标记
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.freeMarker();
}
@Bean
public FreeMarkerConfigurer freemarkerConfig() {
FreeMarkerConfigurer config = new FreeMarkerConfigurer();
config.setTemplateLoaderPath("/WEB-INF/pages/");
return config;
}
您仍然需要FreeMarkerConfigurer
来引导和配置 FreeMarker。