Spring 5.3后ResourceBundleViewResolver的替代方案咨询
替代ResourceBundleViewResolver的方案(适配Tiles3场景)
你的场景是通过ResourceBundleViewResolver加载views.properties映射视图名到TilesView,结合Spring官方推荐,最直接的替代方案是使用UrlBasedViewResolver,直接指定默认视图类型为TilesView,可完全省去views.properties的冗余配置,直接由Tiles根据视图名匹配tiles-def.xml中的定义。
具体修改步骤
1. 替换ViewResolver Bean
修改Configuration_place类中的viewResolver Bean,用UrlBasedViewResolver替代ResourceBundleViewResolver:
public class Configuration_place extends WebMvcConfigurerAdapter { @Bean public UrlBasedViewResolver viewResolver() { UrlBasedViewResolver viewResolver = new UrlBasedViewResolver(); // 指定默认视图类为Tiles3的视图实现 viewResolver.setViewClass(org.springframework.web.servlet.view.tiles3.TilesView.class); // 你的场景无需前缀/后缀,保持空值即可 viewResolver.setPrefix(""); viewResolver.setSuffix(""); return viewResolver; } @Bean public TilesConfigurer tilesConfigurer() { TilesConfigurer tilesConfigurer = new TilesConfigurer(); tilesConfigurer.setDefinitions("/tiles-def.xml"); return tilesConfigurer; } }
2. 移除冗余配置文件
直接删除views.properties即可——UrlBasedViewResolver会将控制器返回的视图名(如index、login)直接传递给TilesView,Tiles框架会自动匹配tiles-def.xml中对应名称的<definition>节点,和原逻辑完全一致。
原理说明
UrlBasedViewResolver是Spring通用视图解析器,支持直接绑定视图类,控制器返回视图名时,它会实例化指定的TilesView并传递视图名给Tiles框架。- 省去
views.properties的映射步骤后,Tiles依然会按视图名匹配XML定义,功能和原有实现完全对齐,且配置更简洁。
验证效果
启动应用后,控制器返回index时,UrlBasedViewResolver会创建TilesView实例,Tiles加载tiles-def.xml中名为index的定义,渲染对应JSP内容,和原行为完全一致。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

