You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 05:41:19