2014-04-12 4 views
2

내 WEB-INF 디렉토리 내에 두 개의 폴더가 있습니다. 첫 번째는 views이며 데스크톱 웹 사이트 템플릿 파일이 있고 두 번째 것은 mobile_views 모바일 웹 사이트 템플릿이 있습니다. WebConfiguration 클래스 파일을 사용하고 필요한 @Bean 함수를 정의합니다. 이제 요청에 따라 viewResolver.setPrefix(viewFolderName)을 변경하고 싶습니다. 사용자가 모바일에서 웹 사이트를 조회하면 mobile_views을 설정하므로 views이됩니다. 그래서 장치 브라우저를 감지하고 viewFolderName을 설정했지만 서버가 시작될 때 WebConfiguration 클래스가 액세스되기 때문에 한 번만 작동하는 것 같습니다. 그래서이 문제에 직면합니다. 여기에 내 코드가있다. 내게이 문제에 대한 해결책을 알려줘.스프링 웹 MVC : 클라이언트 요청에 따라 viewResolver 접두사를 변경하는 방법

@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; 
} 
+0

Plz은 – TechSpellBound

+0

기본적으로 내가 WebConfiguration에 추가했습니다 .. "한 번만 작동"에 대한 정교한'의 viewResolver()'방법, 그래서 서버가'접미사를 설정하기 시작 후에 아주 처음에 호출 방법 접두사, templateMode 등 .' – user2518430

+1

스프링 모바일을보세요! 어쩌면 당신의 상황에서 유용합니다 – gipinani

답변

2

스프링 부트에 따라 달라지는 스프링의 사이트에서 this 튜토리얼을 살펴보십시오.

고기는 DeviceResolverHandlerInterceptorDeviceHandlerMethodArgumentResolver으로 구성해야합니다.

이 완료되면, 당신은 처리 장치에 따라 차별화하기 위해 컨트롤러 방식의 장치 인수를 사용할 수 있습니다

그 시점에서 한 단계 더는 다음과 같은 방식으로 (Spring Mobile에서 제공) 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; 
} 
+0

네, 정말 작동 ... 고마워요 @geoand – user2518430

+0

@ user2518430 괜찮습니다! – geoand

관련 문제