总有一天你的谜底会解开 2022-02-25 17:46 采纳率: 77.4%
浏览 20
已结题

springmvc中多个视图解析器争优问题

问题描述:
在一个springmvc项目中,我用了thymeleaf解析器和InternalResourceViewResolver解析器,我想让前者解析html页面,后者解析jsp页面,但是出现了以下情况:
一、当我设置前者的优先级大于后者时,html页面可以被前者正常解析,但是原本后缀名为jsp的j页面也会被解析成后缀为html,如图:

img


,就像后者解析器没有起到任何作用。
二、当我设置前者的优先级小于后者时,jsp页面可以正常解析,但是html页面被解析成了jsp后缀。
三、当两者优先级设置相同时,效果等同于第二种情况

项目源码:

img


package Configs;
Import...
@EnableAspectJAutoProxy
@EnableWebMvc
@Configuration
@ComponentScan("Controllers")
public class WebApplicationConfig {
    @Bean
    public InternalResourceViewResolver inter(){
        InternalResourceViewResolver interr=new InternalResourceViewResolver();
       // interr.setViewNames("jsp*");
        interr.setPrefix("/Jsps/");
        interr.setSuffix(".jsp");
        interr.setOrder(1);
        return interr;
    }
    @Bean
    public ThymeleafViewResolver thymeleafViewResolver(@Autowired SpringTemplateEngine springTemplateEngine){
        ThymeleafViewResolver resolver = new ThymeleafViewResolver();
        resolver.setOrder(2);   
        resolver.setCharacterEncoding("UTF-8");   
        resolver.setTemplateEngine(springTemplateEngine);  
        return resolver;
    }
    @Bean
    public SpringResourceTemplateResolver templateResolver(){
        SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver();
        resolver.setSuffix(".html");   
        resolver.setTemplateMode("HTML");
        resolver.setPrefix("/HTMLS/");   
        return resolver;
    }
    @Bean
    public SpringTemplateEngine springTemplateEngine(@Autowired ITemplateResolver resolver){
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(resolver);  
        return engine;
    }
}

package Configs;
@Configuration
public class ZongConfig extends AbstractAnnotationConfigDispatcherServletInitializer {

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }

    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebApplicationConfig.class};
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}




package Controllers;
@Controller
public class Hello {
    @RequestMapping("/hellohtml")
    public String helloHtml(Model m){
        m.addAttribute("title","hello,world");
        return "hello";
    }
}

package Controllers;

@Controller
public class HelloJsp {
    @RequestMapping("/hellojsp")
    public String getHelloJsp(){
        return "hellojsp";
    }
}
  • 写回答

1条回答 默认 最新

  • 编号灬9527 2022-02-25 19:35
    关注

    自己实现ViewResolver,路径得包含文件后缀,自己获取文件后缀,决定内部用那个具体的代理类去执行具体的视图解析,让解析器也有动态功能
    不过你这想要自己实现估计有难度

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月9日
  • 修改了问题 3月13日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 依据报错在原代吗格式的基础上解决问题
  • ¥15 在虚拟机中安装flash code
  • ¥15 单片机stm32f10x编写光敏电阻调节3.3伏大功率灯亮度(光强越大灯越暗,白天正常光强灯不亮,使用ADC,PWM等模块)望各位找一下错误或者提供一个可实现功能的代码
  • ¥20 verilog状态机方法流水灯
  • ¥15 pandas代码实现不了意图
  • ¥15 GD32H7 从存储器到外设SPI传输数据无法重复启用DMA
  • ¥25 LT码在高斯信道下的误码率仿真
  • ¥45 渲染完成之后将物体的材质贴图改变,自动化进行这个操作
  • ¥15 yolov5目标检测并显示目标出现的时间或视频帧
  • ¥15 电视版的优酷可以设置电影连续播放吗?