/** * Build the full view name based on the given view name * as indicated by the URL path. * <p>The default implementation simply applies prefix and suffix. * This can be overridden, for example, to manipulate upper case * / lower case, etc. * @param viewName the original view name, as indicated by the URL path * @return the full view name to use * @see #getPrefix() * @see #getSuffix() */ protected String postProcessViewName(String viewName) { return getPrefix() + viewName + getSuffix(); }
/** * Returns view name based on the URL filename, * with prefix/suffix applied when appropriate. * @see #extractViewNameFromUrlPath * @see #setPrefix * @see #setSuffix */ @Override protected String getViewNameForRequest(HttpServletRequest request) { String uri = extractOperableUrl(request); return getViewNameForUrlPath(uri); }
/** * Returns view name based on the URL filename, * with prefix/suffix applied when appropriate. * @param uri the request URI; for example {@code "/index.html"} * @return the extracted URI filename; for example {@code "index"} * @see #extractViewNameFromUrlPath * @see #postProcessViewName */ protected String getViewNameForUrlPath(String uri) { String viewName = this.viewNameCache.get(uri); if (viewName == null) { viewName = extractViewNameFromUrlPath(uri); viewName = postProcessViewName(viewName); this.viewNameCache.put(uri, viewName); } return viewName; }
@Test public void settingSuffixToNullCausesEmptyStringToBeUsed() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); ctrl.setSuffix(null); assertNotNull("For setPrefix(..) with null, the empty string must be used instead.", ctrl.getSuffix()); assertEquals("For setPrefix(..) with null, the empty string must be used instead.", "", ctrl.getSuffix()); }
@Test public void settingPrefixToNullCausesEmptyStringToBeUsed() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); ctrl.setPrefix(null); assertNotNull("For setPrefix(..) with null, the empty string must be used instead.", ctrl.getPrefix()); assertEquals("For setPrefix(..) with null, the empty string must be used instead.", "", ctrl.getPrefix()); }
@Test public void withPlainFilename() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/index"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("index", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
@Test public void withPrefixAndSuffix() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); ctrl.setPrefix("mypre_"); ctrl.setSuffix("_mysuf"); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/index.html"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("mypre_index_mysuf", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
/** * Extract a URL path from the given request, * suitable for view name extraction. * @param request current HTTP request * @return the URL to use for view name extraction */ protected String extractOperableUrl(HttpServletRequest request) { String urlPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); if (!StringUtils.hasText(urlPath)) { urlPath = getUrlPathHelper().getLookupPathForRequest(request); } return urlPath; }
@Test public void withPrefix() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); ctrl.setPrefix("mypre_"); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/index.html"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("mypre_index", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
@Test public void withSuffix() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); ctrl.setSuffix("_mysuf"); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/index.html"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("index_mysuf", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
@Bean @Lazy protected UrlFilenameViewController passThroughController() { return new UrlFilenameViewController(); }
@Test public void withFilenamePlusExtension() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/index.html"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("index", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
/** * Extract a URL path from the given request, * suitable for view name extraction. * @param request current HTTP request * @return the URL to use for view name extraction */ protected String extractOperableUrl(HttpServletRequest request) { String urlPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); if (!StringUtils.hasText(urlPath)) { urlPath = getUrlPathHelper().getLookupPathForRequest(request); } return urlPath; }
/** * Build the full view name based on the given view name * as indicated by the URL path. * <p>The default implementation simply applies prefix and suffix. * This can be overridden, for example, to manipulate upper case * / lower case, etc. * @param viewName the original view name, as indicated by the URL path * @return the full view name to use * @see #getPrefix() * @see #getSuffix() */ protected String postProcessViewName(String viewName) { return getPrefix() + viewName + getSuffix(); }
/** * Returns view name based on the URL filename, * with prefix/suffix applied when appropriate. * @see #extractViewNameFromUrlPath * @see #setPrefix * @see #setSuffix */ @Override protected String getViewNameForRequest(HttpServletRequest request) { String uri = extractOperableUrl(request); return getViewNameForUrlPath(uri); }
/** * Returns view name based on the URL filename, * with prefix/suffix applied when appropriate. * @param uri the request URI; for example {@code "/index.html"} * @return the extracted URI filename; for example {@code "index"} * @see #extractViewNameFromUrlPath * @see #postProcessViewName */ protected String getViewNameForUrlPath(String uri) { String viewName = this.viewNameCache.get(uri); if (viewName == null) { viewName = extractViewNameFromUrlPath(uri); viewName = postProcessViewName(viewName); this.viewNameCache.put(uri, viewName); } return viewName; }
@Test public void multiLevel() throws Exception { UrlFilenameViewController ctrl = new UrlFilenameViewController(); MockHttpServletRequest request = new MockHttpServletRequest("GET", "/docs/cvs/commit.html"); MockHttpServletResponse response = new MockHttpServletResponse(); ModelAndView mv = ctrl.handleRequest(request, response); assertEquals("docs/cvs/commit", mv.getViewName()); assertTrue(mv.getModel().isEmpty()); }
/** * Extract a URL path from the given request, * suitable for view name extraction. * @param request current HTTP request * @return the URL to use for view name extraction */ protected String extractOperableUrl(HttpServletRequest request) { String urlPath = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); if (!StringUtils.hasText(urlPath)) { urlPath = getUrlPathHelper().getLookupPathForRequest(request); } return urlPath; }
/** * Build the full view name based on the given view name * as indicated by the URL path. * <p>The default implementation simply applies prefix and suffix. * This can be overridden, for example, to manipulate upper case * / lower case, etc. * @param viewName the original view name, as indicated by the URL path * @return the full view name to use * @see #getPrefix() * @see #getSuffix() */ protected String postProcessViewName(String viewName) { return getPrefix() + viewName + getSuffix(); }
/** * Returns view name based on the URL filename, * with prefix/suffix applied when appropriate. * @see #extractViewNameFromUrlPath * @see #setPrefix * @see #setSuffix */ @Override protected String getViewNameForRequest(HttpServletRequest request) { String uri = extractOperableUrl(request); return getViewNameForUrlPath(uri); }