tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
724
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    milchkaffee Tutorials.de Gastzugang
    Hallo, ich bin noch ziemlicher Neuling in Sachen Struts 2. Nun komm ich nicht weiter bei einer Action.

    Auf einer Webseite werden mehrere Checkboxen sein, jedoch nicht in einem Formular mit Submit-Button, sondern per Javascript abgeschickt. Die Webseite selbst darf durch Anklicken der Checkboxen nicht verlassen werden. Deshalb die Javascript-Übergabe, die soweit schon funktioniert. Hier etwas Code, noch als Textlink:

    HTML-Code:
        <s:url action="Sammler" includeContext="true" id="klick">
          <s:param name="nr">2222</s:param>
        </s:url>
        <a href='<s:property value="#klick"/>'
           onClick="location.href='<s:property value="#klick"/>';return false;">Klack</a>
    xml-Auszug:
    HTML-Code:
            <action name="Sammler" class="coll.Sammler">
                <result name="SUCCESS">/coll/liste.jsp</result>
            </action>
    Aufruf der Sammler.action klappt. Dort wird in eine Liste in den SessionContext geschrieben, denn die Ergebnisse müssen seitenübergreifend erhalten bleiben, klappt auch. Problem: Die Action leitet anschließend auf eine jsp-Seite weiter. Das darf sie aber nicht. Sie soll die Werte sammeln, nichts weiter. Ich habs schon mit "INPUT" versucht, aber auch da wird weitergeleitet. Und ohne result-Angabe gehts schon gar nicht.

    Wie kann man eine Action stoppen zwischen Ausführung und Weiterleitung?

    Grüße
    Karsten
     

  2. #2
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Hallo,

    html ist synchron, d.h. ein Klick, der ein Formular abschickt oder ähnliches hat einen synchronen http-Aufruf zur folge. Der Browser rechnet dann mit einer neuen html-Seite. Auch wenn man es hinbekommt, dass struts keine neue Seite ausliefert, wird der Browser damit ein Problem haben.
    Typischerweise würde man sowas mit einer asynchronen Technik realisieren wie http://de.wikipedia.org/wiki/Ajax_%28Programmierung%29
    Ich würde aber nicht ausschliessen, dass es einen Trick gibt, um ein ähnliches asynchrones Verhalten zu produzieren.
     
    Denken gefärdet die Gewohnheit

  3. #3
    milchkaffee Tutorials.de Gastzugang
    Danke, mit Ajax bzw. JSON hatte ich auch schon rumgespielt. Aber da müsste der JSON-String deserialisiert werden, das lohnt sich nun wirklich nicht.

    Jetzt probiere ichs mal mit Result-Typen. Ich habe einen geschrieben, dort rein die Datenverarbeitung, die seither in der Action lag. Result-Typ wird gefunden, abgearbeitet, aber danach kommt schon wieder eine autom. Weiterleitung. Diesmal zu Collector.action.

    HTML-Code:
      <package name="sammel" namespace="/example">
        <result-types>
          <result-type name="custom" class="coll.StopResult" />
        </result-types>
        <action name="Collector" class="coll.StopResult">
          <result type="custom">artist</result>
        </action>
      </package>
    Ist alles mehr oder weniger aus dem Buch "Struts 2 im Einsatz". Dort steht, dass ein package, das struts-default erbt, autom. eine Weiterleitung (dispatch) durchführt. So, aber mein package erbt explizit nicht von struts-default. Ich versteh das nicht.

    Gruß
    Karsten
     

  4. #4
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    Es gibt zwei Weiterleitungstechniken, forward und redirect.

    Bei forward wird die angefragte URL auf eine andere URL serverseitig weitergeleitet, dabei sieht der Client nur die URL, die er angefragt hat.
    Bei redirect wird der Clientbrowser benachrichtigt, eine andere URL aufzurufen, was dieser auch tut. Den zweiten Aufruf bemerkt der Client.

    Mit einem von beiden rechnet der Clientbrowser für eine normale html-form. Sollte der Server einfach nichts machen, also kein redirect oder forward zu einer gültigen Seite, dann wird der Browserclient - je nach Hersteller - die aktuelle Seite für ungültig erklären.
    Asynchrone Techniken führen keinen HTTP Request durch und haben so dieses Problem nicht. Dort wird der Request über eine Browserkomponente abgebildet, Ajax-engine z.B.
     
    Denken gefärdet die Gewohnheit

Ähnliche Themen

  1. Action im Struts
    Von Athro im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 0
    Letzter Beitrag: 11.04.08, 15:24
  2. Struts action-forward Parameterweitergabe
    Von shockshell im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 10.03.08, 21:17
  3. Formular: Action-Befehl auf Wunsch stoppen
    Von Dommas im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 29.09.05, 13:05
  4. Antworten: 3
    Letzter Beitrag: 29.09.05, 12:10
  5. Struts Action auf andere Action umleiten und Parameter übergeben
    Von mungoparks im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 2
    Letzter Beitrag: 28.01.05, 18:28