# JSF Navigation auf vorhergehende Seite(n)



## freez (8. Okt 2007)

Hallo,

ich habe folgende Navigationsstruktur (mit den NavigationRules in der faces-config):

Index.jsf -> Setting1.jsf -> Setting2.jsf -> Setting3.jsf -> Setting4.jsf ->Uebersicht.jsf

In den Settings nimmt der User Einstellungen vor und in der Übersicht werden alle Einstellungen noch einmal zusammengefasst. Nun möchte ich dem User auf der Übersicht die Möglichkeit geben seine Einstellungen noch mal zu überarbeiten. Hat der User die Einstellungen überarbeitet soll er wieder zurück zu der Übersicht springen. Was sagen eure best practise Erfahrungen, wie ich das lösen sollte:

- Mache ich kopien von Setting1 - 4 und ändere die Navigationslinks, damit der User von der Übersicht zu den Kopien springt und dann wieder zur Übersicht kommt (Nachteil: doppelte Seiten -> doppelte Arbeit beim Überarbeiten)
- ich verweise von der Uebersicht auf die vorhandenen Setting Seiten. Aber wie springe ich dann auf Uebersicht und nicht zur nächsten Setting Seite?


----------



## maki (8. Okt 2007)

Wenn ich faul wäre, würde ich in den settings seiten je zwei buttons anbieten: einen um zum nächsten settings dialog zu kommen, und einen um zur Übersicht zu kommen.

Wahrscheinlich ist ein zusätzlicher Cancel/Back Button auch nicht verkehrt.


----------



## freez (8. Okt 2007)

Und wenn du nicht faul wärst?


----------



## maki (8. Okt 2007)

Kann ich dir nicht sagen  war noch nie anders...

Du könntest auch jedesmal eine neue JSP anlegen, wäre imho aber nur umständlich...

Du könntest mit dem rendered oder disabled attribut und dem zustand deiner Bean steuern, wann welche Buttons angezeigt/aktiviert werden.


----------



## freez (8. Okt 2007)

Oh ja, das mit dem rendered Attribut ist n interessanter Ansatz. d.h. ich mache 2 Buttons rein, einen für die nächste Setting Seite und einen für die Übersicht, und je nachdem von wo ich komme schalte ich das rendered Attribut um.
Habe ich das soweit richtig verstanden?

Gibt es sonst noch Ansätze, wie man sowas löst? Interessant wäre es auch, wenn man da was mit den Navigation Rules machen könnte.


----------



## maki (8. Okt 2007)

Klar, musst nur einen anderen outcome spezifizieren mit anderem Ziel.

Auch dafür brauchst einen eigenen Button, auch das könnte man mit rendered lösen.
Oder aber deine Bean gibt einen anderen outcome zurück, abhängig vom Status.


----------



## freez (8. Okt 2007)

Ich habe mich noch etwas in den weiten des Internets umgeschaut. Im Endeffekt werde ich es wohl so machen, wie du es hier geschrieben hast:


> Oder aber deine Bean gibt einen anderen outcome zurück, abhängig vom Status.



Ich habe auch in Erwägung gezogen einen Filter dafür zu schreiben. Aber ich glaube das ist doch zu viel des Guten! Vielleicht kommt ja irgendwann in späteren JSF Versionen sowas mal zum Konfigurieren (für die faces-config z.B.)


----------



## maki (8. Okt 2007)

Filter???
Brauchst du doch nicht:

Gib deinem commandlLink/commandButton doch einfach nur eine Action an:

```
<h:commandButton
    id="commandButton_new_record"
    value="#{resources.button_new_record}"
    action="#{DeineBean.deineAction}" 
...
```

deine Bean braucht dann nur noch eine Methode mit folgender signatur:

```
public String deineAction() {

    ...

    return "einOutcomeAusDeinenNaviRules";
    }
```

Es wäre wirlich gut, wenn du dich mehr in JSF reinarbeiten würdest, bevor du anfängst große Apps zu schreiben, in deinem eigenen Interesse.


----------



## freez (8. Okt 2007)

Hallo maki,

ich habe schon ein paar JSF Applikationen erstellt. Nicht wirklich groß aber ich kann sagen, dass ich mich gut reingearbeitet habe. Auch das action Attribut kenne ich.

Ich habe ja eigentlich nach einer best practise Methode gefragt, wie man sowas löst. Ich bin ja der meinung, dass ich nicht der erste bin, der so eine Navigation umsetzen will. Das ich mit dem outcome meine Navigation beeinflussen kann weiss ich auch. Ich habe nur gehofft, dass es evtl. ne schönere Möglichkeit gäbe, als dies über meine Bean zu machen. Am liebsten würde ich sowas gerne in der faces-config konfigurieren, als in ner Bean zu programmieren. Aber die NavigationRules geben solche Möglichkeiten leider nicht her.

Ich hatte nur gehofft evtl. noch andere meinungen dazu zu hören. Aber trotzdem vielen Dank für deine Hilfe. Hast mir ja heute doch ordentlich geholfen


----------



## maki (8. Okt 2007)

Wollte dir nicht zu nahe treten, man sieht nur leider viel zu oft Leute, die glauben mit einem Tutorial alleine JSF lernen zu können...

Sorry, da hab ich dich wohl falsch eingeschätzt.

Gruß,

maki


----------



## zordan (8. Okt 2007)

Du könntest mal schauen, ob du mit einem eigenen NavigationHandler das ereichen kannst, was du möchtest.

Habe damit mal rumgespielt, um direkt eine geschützte Seite per URL anzusprechen und wenn der User nicht angemeldet war, wird er zur Anmeldeseite geleitet und danach zurück auf die ursprünglich angewählte Seite.

Gruß
zordan


----------



## freez (8. Okt 2007)

@maki: Ja, am Anfang stand ein Tutorial. Aber das reicht bei Weitem nicht. ich habe mir schon einiges an Lektüre zur Gemüte geführt. Aber eines konnten alle Bücher nicht erfüllen: Wie mache ich gewisse Dinge richtig. Mein Problem heute war ja nicht eine Lösung zu finden. Ich hätte das problem schon irgendwie gemeistert. Aber wie löse ich das problem am sinnvollsten richtig. Manchmal gibt es ja API's, die ich noch nicht kenne. Vielleicht gibt es ja auch schon was dafür.

@zordan: kannst du mal grob aufzeigen, wie du den handler angegangen bist? Der Handler ist dann wahrscheinlich ein Filter gewesen?


----------



## zordan (8. Okt 2007)

Ich fühl mich auch teilweise so, als ob meine Lösungen für irgendwelche Probleme wie von hinten durch die Brust ins Auge wären. Solange es läuft ... schöner kann man es immer noch machen :-D

Hier mal 2 Links:

www.jsftutorials.net/jsfNavigation/jsf-login-navigation-redirect.html
www.jsftutorials.net/faces-config/navigationDecorator.html

Sonst musst du mal die Suchmaschine deines Vertrauens anwerfen, hab leider nicht mehr alle Links dazu, die liegen in der Firma auf meiner Workstation.
Doch die beiden Links geben schon mal einen Einblick.


----------



## freez (8. Okt 2007)

@zordan: 





> Ich fühl mich auch teilweise so, als ob meine Lösungen für irgendwelche Probleme wie von hinten durch die Brust ins Auge wären



Du hast es genau richtig ausgedrückt. Aber scheinbar ist das, was man sich denkt doch ab und zu der richtige Weg. Aber wenn man nicht frägt, wird man es auch nie besser wissen. Danke für die Links. Sind recht interessant.


----------



## Sanix (9. Okt 2007)

Das liegt halt daran, dass du an ein Framework gebunden bist. Das Gleiche ist, wenn du nach einer Action of eine externe Seite kommen willst.
Dann musst du ein interner redirect im Code selber machen, auch ziemlich unschön.


----------

