Redirect im Phase Listener

internet

Top Contributor
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:

Code:
	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

Bekanntes Mitglied
Du musst glaube ich an dieser Stelle den Navigation handler verwenden:
Java:
FacesContext ctx = FacesContext.getCurrentInstance();

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

Grüße
 

internet

Top Contributor
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

Bekanntes Mitglied
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

Top Contributor
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:
Code:
	<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)
Code:
	<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

Bekanntes Mitglied
na dann:

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

sollte doch funktionieren oder?
 

Ähnliche Java Themen


Oben