2013-10-08 60 views
0

在我的JSF應用程序中,我想實現一個網頁過濾器,以便在使用過的設備(我使用spring-mobile設備解析器)的功能中更改請求的視圖。網頁過濾器中的URL重寫

我有這個在我的過濾器:

String requestURI = request.getRequestURI(); 

    Device device = DeviceUtils.getCurrentDevice(request); 

    if (!requestURI.contains("/mobile") && device.isMobile()) { 
     String newUri = requestURI.replace("/contextroot/faces/html/", "/contextroot/faces/html/mobile/"); 
     request.getRequestDispatcher(newUri).forward(request, response); 
    } 
    else { 
     filterChain.doFilter(request, response); 
    } 

但我得到一個異常

/contextroot/faces/html/mobile/consult/consult.xhtml Not Found in ExternalContext as a Resource 

我在做什麼錯?

+0

它與requestURI.replace( 「/上下文根/面/ HTML /」, 「/面/ HTML /移動/」); –

回答

0

HttpServletRequest#getRequestDispatcher()需要一個相對於上下文根的路徑,所以你不應該包含上下文根本身的路徑。這在javadoc(重點煤礦)明確規定:

...

指定可以是相對的,儘管它不能在當前servlet上下文外側延伸的路徑名。 如果路徑以「/」開始,則將其解釋爲相對於當前上下文根。如果servlet容器無法返回RequestDispatcher,則此方法返回null

...