Navigation verhindern unter bestimmten Voraussetzungen

  • Themenstarter Themenstarter Gelöschtes Mitglied 68249
  • Beginndatum Beginndatum
G

Gelöschtes Mitglied 68249

Gast
Moin Gemeinde,

Ich habe mal eine Frage zur clientseitigen Validierung (denke ich mal).

In meiner Anwendung soll der User demnächst einen Unterpunkt bekommen, in dem er Daten anschauen und pflegen kann.
Dazu habe ich auf der "Pflegeseite" eine dynamische Tabbed-View, mit einer Suchmaske und dann kann der Benutzer ein Tab pro Datensatz öffnen.
Diese Dynamische Tabbed-View speist sich aus einer Liste mit "OpenTab"-Objekten.
Dieses Objekt hat folgende Eigenschaften:
Java:
public class OpenTabObj {
    
    private String title;
    private String subpage;
    private SearchableEntity content;
    
    private boolean closable;
    private boolean editable;
    
    private boolean editor = false;
    private boolean dirty = false;

    public OpenTabObj(String title, String subpage, SearchableEntity content, boolean closable, boolean editable) {
        this.title = title;
        this.subpage = subpage;
        this.content = content;
        this.closable = closable;
        this.editable = editable;
    }

    public String getTitle() {
        if(editor) return title + " *";
        return title ;
    }

    public boolean isClosable() {
        if(editor) return false;
        return closable;
    }
}

D.h. ich weiß, welches Tab der Benutzer auf editieren gestellt hat und wenn mir eine gute Lösung einfällt, dann weiß ich auch, ob er wirklich etwas verändert hat. Aktuell gehen wir mal davon aus, dass wenn editor == true, dann muss auch gespeichert werden. Wenn gespeichert wurde, dann setze ich editor wieder auf false.

Jetzt ist die Frage, kann ich, wenn der Benutzer in der Navigation etwas anklickt, bevor Serverseitig irgendein Wechsel angestoßen wird, zum einen eine Warnmeldung öffnen, dass es ungespeicherte Änderungen gibt und dann den Benutzer entscheiden lassen, ob es ihm egal ist, oder ob er die Navigation abbrechen möchte?
Die Goldrand-Lösung wäre dann wenn dies sogar bei Eingabe einer URL, oder klick auf den Zurück-Knopf klappen würde.

Gibt es dafür Möglichkeiten?
 
Jetzt ist die Frage, kann ich, wenn der Benutzer in der Navigation etwas anklickt, bevor Serverseitig irgendein Wechsel angestoßen wird, zum einen eine Warnmeldung öffnen, dass es ungespeicherte Änderungen gibt und dann den Benutzer entscheiden lassen, ob es ihm egal ist, oder ob er die Navigation abbrechen möchte?
Wieso sollte das serverseitig passieren?
1) Der Benutzer ändert etwas am augenblicklichen Objekt.
2) Jetzt will er eine Url eingeben oder er möchte zu einem anderen Objekt navigieren.
3) Der Client gibt eine Warnmeldung aus und stellt ihn vor die Wahl entweder die Änderungen zu speichern oder sie zu verwerfen.
 
Von was für einer Umgebung/Programmiersprache sprichst du überhaupt?
In JavaScript gibt es:
Javascript:
addEventListener("beforeunload", (event) => {});
onbeforeunload = (event) => {};
Hier könntest du dein: editor == true abfangen. Das wäre ein übliches Vorgehen.
Möglich wäre auch:
Javascript:
addEventListener("hashchange", (event) => {});
onhashchange = (event) => {};
wenn die typischen URL's aus einer Spring-Anwendung genutzt werden.
In React/Angular/Vue gibt es noch weitere Möglichkeiten.

Das spielt aber überhaupt nur eine Rolle, wenn man sowas wie einen Speichern-Button benötigt/verwendet. Das macht aber kein Mensch mehr auf diese Art. Normalerweise Speichert man automatisch wenn blur() ausgelöst wird.

Evtl. verstehe ich das auch alles falsch. Da in deiner Beschreibung gar nicht klar wird, was du überhaupt verwendest. Ich habe mich nur an "clientseitigen Validierung" orientiert.
 
Manchmal vergess ich bei aller Beschreibung die Grundlagen mit rein zu bringen.
Also es geht um eine Anwendung in Java 11 auf einem Websphere Server. Frontend ist mit Primefaces in JSF gelöst.
Das Automatische Speichern finde ich bei solchen Daten nicht so gut, aber ich bin nur die Technik, vielleicht kann man das mit den Usern nochmal besprechen. In der aktuellen Anwendung haben die einen Speichern Knopf, also wollte ich ihnen den auch hier lassen.
Was ist denn das blur() Event? an welcher Stelle des Lifecycle droppt das denn?
Die Eventlistener klingen aber erstmal vielversprechend. Ich habe zwar aktuell so weit es geht auf Frontend-Scripting verzichtet, aber das wird jetzt sowieso mehr kommen, weil einige Seiten interaktiver werden sollen, da wird es sich dann sowieso nicht mehr vermeiden lassen.
 

Zurück
Oben