我的WEB-INF目录中有两个文件夹,第一个是views
与桌面网站相关的模板文件,第二个是mobile_views
与移动网站模板。我正在使用WebConfiguration类文件并定义所需的@Bean
功能。现在我想viewResolver.setPrefix(viewFolderName)
根据要求更改。如果用户通过手机访问该网站,则将其设置为mobile_views
否则views
。因此,我正在检测设备浏览器并设置,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 Boot的本教程。
关键是您需要配置DeviceResolverHandlerInterceptor
和DeviceHandlerMethodArgumentResolver
。
完成后,您可以使用控制器方法的Device参数来区分处理方式,具体取决于设备
从这一点出发,要采取的进一步措施是按照以下方式进行集成LiteDeviceDelegatingViewResolver
(由Spring Mobile提供):
@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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句