【问题标题】:Spring custom view resolverSpring 自定义视图解析器
【发布时间】:2018-03-10 23:23:29
【问题描述】:

我已经尝试根据用户代理更改视图的前缀。

如果请求来自 IE,则尝试将其转发到“旧”文件夹,否则将其转发到“现代”文件夹。

@Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
        internalResourceViewResolver.setViewClass(JstlView.class);
        internalResourceViewResolver.setSuffix(".jsp");

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

        if(request.getHeader("User-Agent").contains("Internet Explorer")){
                    internalResourceViewResolver.setPrefix("/WEB-INF/views/legacy/");
        } else {
                    internalResourceViewResolver.setPrefix("/WEB-INF/views/modern/");
        }
        return internalResourceViewResolver;
    }

它根本不起作用。有人可以推荐吗?

【问题讨论】:

  • 不要使用ViewResolver,只需编写HandlerInterceptor 并在postHandle 方法中实现该逻辑。

标签: spring spring-mvc spring-annotations


【解决方案1】:

不要乱用ViewResolver 而是写一个HandlerInterceptor。

public class BrowserPrefixHandlerInterceptor extends HandlerInterceptorAdapter {

    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
        throws Exception {

        if(request.getHeader("User-Agent").contains("Internet Explorer")){
           modelAndView.setViewName("legacy/" + modelAndView.getViewName());
       } else {
           modelAndView.setViewName("modern/" + modelAndView.getViewName());
       }
    }
}

那么注册就像一个普通的拦截器。

@Configuration
public YourWebConfiguration extends WebMvcConfigurerAdapter {

    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new BrowserPrefixHandlerInterceptor());
    }
}

别管ViewResolver。这将适用于每个ViewResolver,而不仅仅是您自己的自定义版本。你可能想让拦截器更聪明一点(检查是否真的有 viewName 并且可能跳过某些 URL)。

【讨论】:

  • 非常感谢老兄。我已经尝试过使用拦截器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多