Używam PrettyFaces w mojej aplikacji JSF. Witryna wymaga uwierzytelnienia, aby uzyskać dostęp do niektórych stron, więc używam detektora (widok prerender), który sprawdza, czy użytkownik jest zalogowany. Jeśli więc użytkownik próbuje uzyskać dostęp do/foo (/foo.jsf przed PrettyFaces), przekierowuję zalogować się.Uzyskiwanie oryginalnego URI żądania z PrettyFaces
Jednak chcę przekierować je do ich początkowego miejsca docelowego, więc chcę dołączyć parametr żądania "następny", aby zamiast tego przekierować użytkownika na/login? Next =/foo. Niestety, nie mogę dostać oryginalny requestURI od przedmiotu wniosku, uri ciąg w następujący kod jest /appname/foo.jsf zamiast/appname/foo
ctx = FacesContext.getCurrentInstance().getExternalContext();
HttpServletRequest request = (HttpServletRequest) ctx.getRequest();
String uri = request.getRequestURI();
Czy istnieje sposób, aby odzyskać oryginał Ścieżka URI?
Wielkie dzięki! W rzeczywistości jest to zapisane w requestMap, jednak nazwa klucza była nieco inna i podana jako ciąg. Następujące pracował. String originalURI = (String) ctx.getRequestMap(). Get ("javax.servlet.forward.request_uri"); – ustun
Uhm, to ta sama wartość, co 'RequestDispatcher # FORWARD_REQUEST_URI'. Zobacz także javadoc: http://download.oracle.com/javaee/6/api/constant-values.html#javax.servlet.RequestDispatcher.FORWARD_REQUEST_URI Co dokładnie dostałeś, gdy sysout się wartości? A może po prostu się nie skompilował? (ta stała została wprowadzona w Servlet 2.5). – BalusC
Tak, nie skompilowano, narzekając na brakujące pole. Dziwne, myślałem, że już używam Serwletu 2.5 (mam go w zależnościach), ale być może inna stara wersja jest nadrzędna. – ustun