JSF Redirect aufgrund expression Bedingung

jazzer

Neues Mitglied
Hallo zusammen

Ich möchte verhindern, dass ein Benutzer direkt auf eine Unterseite einsteigen kann und
per default auf z.B. welcome.jsp verweisen.
Ich habe ein Session Bean, welches ich im Falle dass
Java:
meineBean.theGame == null
auf die welcome Seite verweisen möchte. Habe ich die Möglichkeit bevor der Komponentenbaum abgearbeitet wird, dies umzuleiten?

Ich verwende JSF 1.2.

Vielen Dank jetzt schon für weiterhelfende Tipps

Tom
 

FGB

Mitglied
Hi,

im Grund kannst du ja einen neuen HttpServletResponse setzen, welcher einen redirect einleitet.
Also einfach dort den Header modifizieren.

Es gibt auf dem response Object (HttpServletResponse) 2 Methoden, die mir dafür geeignet erscheinen:

1. response.encodeRedirectURL(String destination);
2. response.sendRedirect(String destination);

API: HttpServletResponse (Java EE 6 )

Das Response Object findest du in einer aktiven JSP. Ich denke in JSF selber kommt man auch an das Objekt.

Viel Erfolg.

Felix
 
S

Sym

Gast
Du könntest einen PhaseListener verwenden.

Ich hoffe, dieser Code hilft Dir weiter.

Java:
package de.mydomain.listener;

import java.io.IOException;

import javax.faces.context.FacesContext;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;
import javax.servlet.http.HttpServletRequest;

import de.larmic.ts.web.config.UserSession;
import de.larmic.web.jsf2.contexts.Contexts;

public class LoginListener implements PhaseListener {

	private static final String loginServletPath = "/pages/login.jsf";

	@Override
	public void afterPhase(final PhaseEvent event) {
		// do nothing

	}

	@Override
	public void beforePhase(final PhaseEvent event) {
		final FacesContext ctx = event.getFacesContext();

		final String servletPath = ((HttpServletRequest) ctx.getExternalContext().getRequest()).getServletPath();

                // some pages are allowed without login
		if (loginServletPath.equals(servletPath) || servletPath.contains("/pages/error")) {
			return;
		}

		boolean loggedIn = false;

		final UserSession userSession = Contexts.get(ctx, UserSession.class);

		if (userSession != null) {
			loggedIn = userSession.isLoggedIn();
		}

		if (!loggedIn) {
			try {
				final String contextPath = "/" + ctx.getExternalContext().getContextName();
				ctx.getExternalContext().redirect(contextPath + loginServletPath);
			} catch (final IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

	@Override
	public PhaseId getPhaseId() {
		return PhaseId.RESTORE_VIEW;
	}

}
 

Ähnliche Java Themen


Oben