# JSF: Verlinkung mittels Button, bedingte Weiterleitung



## Tandibur (27. Apr 2010)

Hi!

Ich programmiere an einer kleinen Webseite mit NetBeans 6.5 und dem JSF-Framework Woodstock.

Ich habe mich durch die Tutorials gearbeitet und komme gut zurecht.

Meine erste Frage:
Wenn ich zum Verlinken zu einer anderen Seite einen Button benutze (action-Methode-Rückgabewert ist Seitentitel und in faces-config ist der Connector vom Button zur Zielseite erstellt), dann erscheint in der Browseradressleiste nicht die neue, sondern noch die Ursprungsseite. Erst wenn ich nochmal auf den Button klicke (er befindet sich im Navigationsmenü), wird die Adresse korrekt angezeigt. Mache ich die Navigation mit Hyperlinks, funktioniert alles so, wie ich es erwarte.

Und die zweite Frage:
Ich habe eine Loginseite (nur zur erweiterten Funktionalität, der Großteil ist so erreichbar). In der SessionBean setze ich den Benutzernamen und werde bei korrekten Eingaben auf die Adminseite weitergeleitet. Ist der Name falsch, wird die Loginseite wieder angezeigt.
Nun ist es jedoch möglich, in der Adressleiste einfach ".../Administration.jsp" einzugeben, und dann ist man auch am Ziel ^^.
Um dies zu umgehen, habe ich in der prerender-Methode der Seite folgenden Code eingegeben:

```
if(!getSessionBean1().isAdmin){
Application application = getApplication();
NavigationHandler navigator = application.getNavigationHandler();
FacesContext facesContext = getFacesContext();
navigator.handleNavigation(facesContext, null, "Login");
}
```

Diese Zeilen habe ich aus dem Tutorial entnommen: 
Navigating Pages in a Web Application - NetBeans IDE 6.5 Tutorial
Das Programm durchläuft zwar den Code, navigiert aber nicht zur gewünschten Seite.

Was mache ich denn noch verkehrt? (Und bitte nicht die erste Frage vergessen )

Vielen Dank fürs Lesen, Lars


----------



## Tandibur (29. Apr 2010)

Hi, ich nochmal.

Zur 2. Frage: wie kann ich denn generell einer jsp sagen: prüfe auf die Variable x, und wenn x==y, dann zeige dich selbst an, ansonsten leite weiter an Seite "falschevariable.jsp" oder an die vorherige Seite zurück?

Lars


----------



## Tandibur (29. Apr 2010)

So langsam taste ich mich ran.

Ich habe jetzt ein Servlet geschrieben, welches immer dann gerufen wird, wenn "Administration.jsp" aufgerufen wird:

```
@Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        boolean checkLogin = Administration.checkLogin(request.getParameter("benutzer"), request.getParameter("passwort"));
        if(checkLogin){
            RequestDispatcher dispatcher = request.getRequestDispatcher("Administration.jsp");
            dispatcher.forward(request, response);
        }
        else{
            RequestDispatcher dispatcher = request.getRequestDispatcher("Login.jsp");
            dispatcher.forward(request, response);
        }
    }
```

Administration.java enthält eine Methode checkLogin(), welche die übergebenen Parameter prüft:

```
public static boolean checkLogin(String benutzername, String passwort){
        getSessionBean1().setAsAdmin(benutzername, passwort);
        return getSessionBean1().admin;
    }
```

das static habe ich nun erst eingetragen, weil im Servlet der Fehler kommt: non-static method ... cannot be referenced from static context ...
Nun ist der Fehler in der Administration.java :noe:

So wie ich das verstehe, ist das Servlet static, aber getSessionBean1() non-static.

Wie umgehe ich das jetzt?

Lars


----------



## Tandibur (29. Apr 2010)

ich lerne ...
... unglaublich 

static vs non-static - alles klar, war ja ne typische Anfängerfrage.

Aber jetzt komm ich schon ne Weile nicht mehr weiter:
Im Ordner WebPages liegen meine jsp´s, im Ordner SourcePackages/tools das Servlet.
mit request.getParameter("id") bekomme ich normalerweise den Wert des mit ID bezeichneten Textfeldes. Nur klappt meine Adressierung nicht:
"Loginage1:html1:body1:form1:textfeld_user" ist kompett unbekannt im Kontext, sagt das Debugging.

Wie muss ich das adressieren?

Wär schön, wenn ich hier nicht nur Selbstgespräche führe ;(

Lars


----------



## Tandibur (5. Mai 2010)

Ich nochmal ^^.

Habe mein Problem nun folgendermaßen gelöst:
NetBeans 6.5 inkl Woodstock deinstalliert, Projekt in eclipse mit struts2 neu erstellt.

Mal sehen, was dort so für Fallstricke lauern.

Aus meiner bisherigen Erfahrung heraus rate ich jedem von der Nutzung Woodstocks ab, da es zu intransparent ist und zu viel Coding abnimmt, bis man nicht mehr weiß, wo die Daten entlanggeschubst werden. Außerdem ist es ja eh veraltet und wird nicht mehr gepflegt.

Lars


----------

