@Autowired public void registerDeviceTypes() { Set<DeviceType> deviceTypes = settings.getDeviceTypes(); for ( LiteDeviceDelegatingViewResolver resolver : viewResolvers ) { if ( deviceTypes.contains( DeviceType.MOBILE ) ) { resolver.setMobilePrefix( MOBILE_PREFIX ); } if ( deviceTypes.contains( DeviceType.TABLET ) ) { resolver.setTabletPrefix( TABLET_PREFIX ); } if ( deviceTypes.contains( DeviceType.NORMAL ) ) { resolver.setNormalPrefix( NORMAL_PREFIX ); } } }
@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; }
@Test public void resolveViewNameTabletDevicePrefixFallback() throws Exception { device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); viewResolver.setEnableFallback(true); expect(delegateViewResolver.resolveViewName("tablet/" + viewName, locale)).andReturn(null); expect(delegateViewResolver.resolveViewName(viewName, locale)).andReturn(view); replay(delegateViewResolver, view); View result = viewResolver.resolveViewName(viewName, locale); assertSame("Invalid view", view, result); verify(delegateViewResolver, view); }
@Test public void resolveViewNameTabletDeviceTabletPrefixRedirect() throws Exception { this.viewName = "redirect:about"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("redirect:about"); }
@Test public void resolveViewNameTabletDeviceTabletPrefixRedirectToEmpty() throws Exception { this.viewName = "redirect:"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("redirect:"); }
@Test public void resolveViewNameTabletDeviceNormalPrefixRedirectToAbsoluteUrl() throws Exception { this.viewName = "redirect:http://spring.io"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("redirect:http://spring.io"); }
@Test public void resolveViewNameTabletDeviceTabletPrefixRedirectToRoot() throws Exception { this.viewName = "redirect:/"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("redirect:/"); }
@Test public void resolveViewNameTabletDeviceTabletPrefixForwardToEmpty() throws Exception { this.viewName = "forward:"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("forward:"); }
@Test public void resolveViewNameTabletDeviceTabletPrefixForwardToRoot() throws Exception { this.viewName = "forward:/"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("forward:/"); }
@Test public void resolveViewNameTabletDeviceNormalPrefixForwardToAbsoluteUrl() throws Exception { this.viewName = "forward:http://spring.io"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("forward:http://spring.io"); }
@Test public void resolveViewNameTabletDeviceNoSitePreferenceTabletPrefix() throws Exception { device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("tablet/" + viewName); }
@Test public void resolveViewNameTabletDeviceTabletPrefixForward() throws Exception { this.viewName = "forward:about"; device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); replayMocks("forward:about"); }
@Test public void resolveViewNameTabletDeviceTabletSitePreferenceTabletPrefix() throws Exception { device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); replayMocks("tablet/" + viewName); }
@Test public void resolveViewNameTabletDeviceNoSitePreferenceTabletPrefixAndSuffix() throws Exception { device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); viewResolver.setTabletPrefix("tablet/"); viewResolver.setTabletSuffix(".tab"); replayMocks("tablet/" + viewName + ".tab"); }
@Test public void resolveViewNameNormalDeviceTabletSitePreferenceTabletPrefix() throws Exception { device.setDeviceType(DeviceType.NORMAL); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); replayMocks("tablet/" + viewName); }
@Test public void resolveViewNameMobileDeviceTabletSitePreferenceTabletPrefix() throws Exception { device.setDeviceType(DeviceType.MOBILE); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); replayMocks("tablet/" + viewName); }
@Test public void resolveViewNameMobileDeviceTabletSitePreferenceTabletPrefixAndSuffix() throws Exception { device.setDeviceType(DeviceType.MOBILE); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); viewResolver.setTabletSuffix(".tab"); replayMocks("tablet/" + viewName + ".tab"); }
@Test public void resolveViewNameNormalDeviceTabletSitePreferenceTabletPrefixAndSuffix() throws Exception { device.setDeviceType(DeviceType.NORMAL); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); viewResolver.setTabletSuffix(".tab"); replayMocks("tablet/" + viewName + ".tab"); }
@Test public void resolveViewNameTabletDeviceTabletSitePreferenceTabletPrefixAndSuffix() throws Exception { device.setDeviceType(DeviceType.TABLET); request.setAttribute(DeviceUtils.CURRENT_DEVICE_ATTRIBUTE, device); request.setAttribute(SitePreferenceHandler.CURRENT_SITE_PREFERENCE_ATTRIBUTE, SitePreference.TABLET); viewResolver.setTabletPrefix("tablet/"); viewResolver.setTabletSuffix(".tab"); replayMocks("tablet/" + viewName + ".tab"); }
/** * Create a {@link LiteDeviceDelegatingViewResolver} delegating to the specified * {@link ViewResolver}. * @param delegate the view resolver to delegate to * @param delegatingOrder the order of the {@link LiteDeviceDelegatingViewResolver} * @return a {@link LiteDeviceDelegatingViewResolver} handling the specified resolver */ public LiteDeviceDelegatingViewResolver createViewResolver(ViewResolver delegate, int delegatingOrder) { LiteDeviceDelegatingViewResolver resolver = new LiteDeviceDelegatingViewResolver( delegate); resolver.setEnableFallback(this.properties.isEnableFallback()); resolver.setNormalPrefix(this.properties.getNormalPrefix()); resolver.setNormalSuffix(this.properties.getNormalSuffix()); resolver.setMobilePrefix(this.properties.getMobilePrefix()); resolver.setMobileSuffix(this.properties.getMobileSuffix()); resolver.setTabletPrefix(this.properties.getTabletPrefix()); resolver.setTabletSuffix(this.properties.getTabletSuffix()); resolver.setOrder(delegatingOrder); return resolver; }