Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringWebMVC:如何根据客户端请求更改viewResolver前缀_Java_Spring Mvc - Fatal编程技术网

Java SpringWebMVC:如何根据客户端请求更改viewResolver前缀

Java SpringWebMVC:如何根据客户端请求更改viewResolver前缀,java,spring-mvc,Java,Spring Mvc,我的WEB-INF目录中有两个文件夹,第一个是视图,其中有桌面网站相关的模板文件,第二个是移动视图移动网站模板。我正在使用WebConfiguration类文件并定义所需的@Bean函数。现在我想根据请求更改viewsolver.setPrefix(viewFolderName)。如果用户从手机访问网站,so将设置mobile\u视图,否则它将视图。因此,我检测设备浏览器并设置viewFolderName,但似乎只工作一次,因为服务器启动时访问WebConfiguration类,这就是我面临此问

我的WEB-INF目录中有两个文件夹,第一个是
视图
,其中有桌面网站相关的模板文件,第二个是
移动视图
移动网站模板。我正在使用WebConfiguration类文件并定义所需的
@Bean
函数。现在我想根据请求更改
viewsolver.setPrefix(viewFolderName)
。如果用户从手机访问网站,so将设置
mobile\u视图
,否则它将
视图
。因此,我检测设备浏览器并设置
viewFolderName
,但似乎只工作一次,因为服务器启动时访问
WebConfiguration
类,这就是我面临此问题的原因。这是我的代码,请给我一些解决方案

@Bean
public ViewResolver viewResolver() {
    InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
    viewResolver.setViewClass( JstlView.class );
    if(isRequestFromMobile()) viewResolver.setPrefix("/WEB-INF/mobile_views/");
    else viewResolver.setPrefix("/WEB-INF/views/");
    viewResolver.setSuffix(".jsp");
    return viewResolver;
}

private @Autowired HttpServletRequest request;
private boolean isRequestFromMobile() {
    String userAgent = request.getHeader("User-Agent");
    String httpAccept = request.getHeader("Accept");
    UAgentInfo detector = new UAgentInfo(userAgent, httpAccept);
    System.out.println("### User Agent: "+userAgent);
    if (detector.detectMobileQuick()) {
        return true;
    }
    return false;
}
看看Spring站点上的教程,它依赖于Spring引导

关键是您需要配置
DeviceSolverHandlerInterceptor
DeviceHandlerMethodArgumentResolver

完成后,可以使用控制器方法的设备参数根据设备区分处理

从这一点出发,进一步的步骤是以以下方式集成
LiteDeviceDelegatingViewResolver
(由提供):

@Bean
public LiteDeviceDelegatingViewResolver liteDeviceAwareViewResolver() {
    InternalResourceViewResolver delegate = 
            new InternalResourceViewResolver();
    delegate.setPrefix("/WEB-INF/views/");
    delegate.setSuffix(".jsp");
    LiteDeviceDelegatingViewResolver resolver = 
            new LiteDeviceDelegatingViewResolver(delegate);
    resolver.setMobilePrefix("mobile/");
    resolver.setTabletPrefix("tablet/");
    return resolver;
}

请详细说明“只工作一次”。基本上,我已经在WebConfiguration
viewsolver()
方法中添加了这一点,因此只有在服务器开始设置
后缀、前缀、模板模式等后,该方法才会在第一次调用。
。看看spring mobile!也许对你的工作有用situation@user2518430没问题!