Announcement

Collapse
No announcement yet.

Bei Formular Fehleingabe auf aktuelle Site umleiten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Bei Formular Fehleingabe auf aktuelle Site umleiten

    Hi newsgroup,

    habe gerade ein Struts tutorial durchgemacht wo folgendes passiert: <br>
    Nutzer gibt Daten in Formular ein, diese werden an Servlet abgeschickt, Servlet validiert und leitet dann weiter an eine "success.jsp" oder eben "fehler.jsp". Dort werden die eingegebenen Daten via Bean mit <bean:write> ausgegeben<br><br>
    Soweit so gut, jetzt dachte ich mir, ist ja gängig bei Fehleingaben nicht auf eine andere Seite weiterzuleiten, sondern eben die Ausgangsseite mit den Fehleingaben (und den bereits korrekt ausgefüllten Feldern) anzuzeigen mit dem Hinweis, wo etwas nicht stimmt.<br><br>
    Problem: Die Daten werden bei Weiterleitung auf meine Ausgangsseite nicht angezeigt, bei Weiterleitung auf die Fehlerseite klappt das jedoch - wo ist da der Fehler?<br><br>
    Der Abschnitt in der struts-konfig lautet:<br>

    <action path="/actions/register3" type="coreservlets.RegisterAction3" name="userFormBean" scope="request"><br>
    <forward name="bad-address" path="/WEB-INF/results/bad-address3.jsp"/><br>
    <forward name="bad-password" path="/WEB-INF/results/bad-password3.jsp"/><br>
    <forward name="success" path="/WEB-INF/results/success3.jsp"/><br>
    </action><br>

    gut, Ausgangspunkt,also das Eingabeformular, ist die index.jsp.<br>
    Jetzt dachte ich mir, anstatt eine Weiterleitung zu "bad-address.jsp" zu machen, jetzt also eine Weiterleitung zur "index.jsp" bei Fehleingabe (also obigen XML Deskriptor entsprechend ändern).<br>
    Problem: die eingegebenen Daten werden dann nicht mit angezeigt. Die index.jsp referenziert das Bean via "<jsp:useBean...>" Syntax und z.b. "<%= UserDaten.getEmail() %>".<br>
    Nutze ich dafür das <bean:write> Tag so bekomme ich einen Server Error: "Cannot find bean userFormBean in any scope"<br>Okay, da gibt es das Bean noch nicht, wenn ich die index.jsp das erste Mal aufrufe, daher wohl der bean-write Fehler. Anscheinend ist die Bean Referenzierung via <jsp:useBean> eine andere als via STRUTS <bean:write>? Nur wie mache ich das bitte, wenn die index.jsp das erste Mal aufgerufen wird, weil ja sonst die Fehlermeldung wegen <bean:write> kommt?

  • #2
    Hallo,

    Kann es sein, dass der Fehler aus dem Attribut <b>scope = "request"</b> resultiert? Hiermit wird schließlich eine Bean nur für den aktuellen Request generiert. Demnach sollte m. E. auch die Bean auf den Forward-Seiten nicht vorhanden sein.

    Mit einem <b>scope = "session"</b> sollte es dann funktionieren...

    Jör

    Comment


    • #3
      Hi Micha,
      Bei Eingabefehlern ein Forward auf die Ausgangsseite (hier index.jsp) zu machen ist nicht ganz richtig. Das was Du willst geht etwas anders. Du benutzt ja für die Validierung der Eingaben eine FormBean/ActionForm (userFormBean). In dieser gibt es ja die validate()-Methode, welche ein Objekt vom Typ ActionErrors zurückliefert. Ist dieses leer, wird der Request weitergeleitet an die Action-Klasse (bei Dir coreservlets.RegisterAction3). Ist in den ActionErrors was drinnen, so wird auf die Seite mit dem Formular zurückgeleitet, wenn in der struts-config bei der entspr. action folgender Eintrag steht:<pre>input="index.jsp"</pre>
      In die index.jsp kanns Du ein <html:errors>-Tag einbauen, welches im Fehlerfall eine Meldung anzeigt und im Nicht-Fehlerfall(also z.B. beim ersten Aufruf) nichts. Schau Dir in dem Zusammenhang mal an, wie man die ActionErrors.add()-Methode richtig benutzt, wie man ActionError-Objekte (ohne s!) richtig instanziert und wie man diese mit Fehlermeldungen aus dem Message-Ressources-File verbindet
      http://www.winfonet.eu

      Comment


      • #4
        <!html-errors> sollte auch funktionieren! und natürlich in den ApplicationRessources die errors definieren

        ciao davi

        Comment

        Working...
        X