2012-12-16 38 views
7

Say hata sayfalık denetleyicisinden hata yol açan bir URL (404) alma, ben şu web.xml girişi ile bir Bahar MVC uygulaması vardır : bahar MVC

@RequestMapping({"","/"}) 
@Controller 
public class RootController { 

    @RequestMapping("error/{errorId}") 
    public String errorPage(@PathVariable Integer errorId, Model model) { 
     model.addAttribute("errorId",errorId); 

     return "root/error.tile"; 
    } 
} 

Şimdi kullanıcı hata sayfası denetleyici tetikleyen varolmayan URL/kullanıcı/gösteriyi/iamnotauser istedi. Bu mevcut olmayan '/ user/show/iamnotauser' URL'sini RootController'ın errorPage() yönteminden modele koyup hata sayfasında görüntülemesini nasıl sağlayabilirim?

cevap

14

Bu hile, javax.servlet.forward.request_uri isteği için kullanılabilir, orjinali uri içerir. Hala Servlet API 2.5 kullanıyorsanız

@RequestMapping("error/{errorId}") 
public ModelAndView resourceNotFound(@PathVariable Integer errorId, 
                HttpServletRequest request) { 
    //request.getAttribute("javax.servlet.forward.request_uri"); 
    String origialUri = (String) request.getAttribute(
               RequestDispatcher.FORWARD_REQUEST_URI); 

    return new ModelAndView("root/error.jspx", "originalUri", origialUri); 
} 

ardından sabit RequestDispatcher.FORWARD_REQUEST_URI yok, ama sen request.getAttribute("javax.servlet.forward.request_uri") kullanabilirsiniz. veya upgrad to javax.servlet:javax.servlet-api:3.0.1

+0

Servlet API 3.0.x ürününü destekleyen bir sunucu kullanıyoruz ancak web.xml dosyasında belirtim olarak 2,5 kullanıyoruz. Bu ayar ile yukarıdaki yaklaşımlar yararlı bir şey vermedi, ama 'request.getAttribute (" javax.servlet.error.request_uri "); –