我在我的JSF應用程序中使用PrettyFaces。該站點需要身份驗證才能訪問某些頁面,因此我使用了偵聽器(prerender視圖)來檢查用戶是否已登錄。因此,如果用戶嘗試在PrettyFaces之前訪問/ foo(/foo.jsf),我將重定向登錄。使用PrettyFaces獲取原始請求URI
但是,我想將它們重定向到它們的初始目標,所以我想附加請求參數「next」,以便將用戶重定向到/ login?next =/foo。不幸的是,我不能從請求對象得到原requestURI,在下面的代碼中的URI串/appname/foo.jsf而不是/應用程序的名字/富
ctx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) ctx.getRequest();
String uri = request.getRequestURI();
有沒有辦法恢復原始URI路徑?
非常感謝!它確實存儲在requestMap中,但是鍵名稍有不同,並以字符串形式給出。以下工作。 String originalURI =(String)ctx.getRequestMap()。get(「javax.servlet.forward.request_uri」); – ustun
呃,這與'RequestDispatcher#FORWARD_REQUEST_URI'的值相同。另請參閱javadoc:http://download.oracle.com/javaee/6/api/constant-values.html#javax.servlet.RequestDispatcher.FORWARD_REQUEST_URI在系統化該值時,您究竟得到了什麼?還是隻是沒有編譯? (這個常量是在Servlet 2.5中引入的)。 – BalusC
是的,它沒有編譯,抱怨丟失的領域。奇怪的是,我以爲我已經在使用Servlet 2.5(在依賴關係中),但也許其他一些舊版本重寫。 – ustun