# Redirect im Phase Listener



## internet (29. Apr 2011)

Hallo,
ich habe folgendes Problem:
Wenn man auf die Seite geht, dann muss erst überprüft werden, ob der User freigeschaltet ist.
Dies geht auch schon.

Nun möchte ich aber folgendes noch implementieren:
Falls er freigeschaltet ist, dann soll er auf eine Seite accept.xhtml kommen, 
falls er nicht freigeschaltet ist, dann auf eine notAccept.xhtml - Seite.

Ich habe in meiner Klasse PhaseListener folgende Methode:


```
public void redirectPage() throws IOException{
	    FacesContext ctx = FacesContext.getCurrentInstance();
	    HttpServletResponse res =(HttpServletResponse) ctx.getExternalContext().getResponse();
	        try {
	    		final Map<String, Object> requestParams = FacesContext.getCurrentInstance()
	            .getExternalContext()
	           .getRequestMap();
	   		
	    		requestParams.put("cmd", "activateUser");
	        	
	        	res.sendRedirect("/accept.xhtml");
	        } catch (IOException ex) {
	        }
	}
```

Aber dies geht nicht.
Es werden dann immer folgende Exception geworfen:
javax.servlet.ServletException  und
java.lang.IllegalStateException

Er meckert an folgender Stelle: res.sendRedirect("/accept.xhtml");

Kann mir bitte jemand helfen


----------



## JimPanse (29. Apr 2011)

Du musst glaube ich an dieser Stelle den Navigation handler verwenden:

```
FacesContext ctx = FacesContext.getCurrentInstance();

ctx.getApplication().getNavigationHandler()
				.handleNavigation(ctx, "/accept.xhtml", null);
```

Grüße


----------



## internet (29. Apr 2011)

Danke für deinen Beitrag
Ich bekomme zwar nun keine Exception - aber an die gewünschte Seite springt er nicht.
Falls er die Seite nicht findet, sollte eine "PageNotFound" - Seite aufgerufen werden - kommt aber nicht....

Hm, woran könnte es liegen?


----------



## JimPanse (29. Apr 2011)

1. Entweder ist der Pfad zu der Seite nicht in Ordnung
2. Das Mapping funktioniert nicht d.h. wie sieht dein Mapping von dem JSF-Servlet aus? Ich glaube /accept.jsf wäre richtig!


----------



## internet (30. Apr 2011)

Ich denke eher 2.)
Sollte die Seite nicht gefunden sein, sollte er ja auf die Seite springen, dass die Seite nicht gefunden wurde.
Das Servlet sieht so aus:

```
<servlet>
		<servlet-name>jsfServlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>jsfServlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
```


Und hier falls die Seite nicht gefunden wurde (geht auch)

```
<error-page>
		<exception-type>java.io.FileNotFoundException</exception-type>
		<location>/faces/common/pageNotFound.xhtml</location>
	</error-page>

	<error-page>
		<error-code>404</error-code>
		<location>/faces/common/pageNotFound.xhtml</location>
	</error-page>
```


----------



## JimPanse (2. Mai 2011)

na dann:


```
ctx.getApplication().getNavigationHandler()
                .handleNavigation(ctx, "/faces/accept.xhtml", null);
```

sollte doch funktionieren oder?


----------



## stormqueen (4. Mai 2011)

Hast du das Problem noch oder ist es inzwischen gelöst?


----------

