kostenloser Webspace werbefrei: lima-city


MVC-Pattern spezielles Verständnisproblem

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    bigbaer

    bigbaer hat kostenlosen Webspace.

    Hallo zusammen,

    vorweg: Grundlegend habe ich MVC verstanden und das folgende Beispiel ist nur ein Ausschnitt dessen, was ich machen will, und daher generell auch leicht ohne MVC realisierbar. Ich will das aber in MVC machen:

    Was soll getan werden:
    Eine kleine Java-Application (standalone) liest auf Knopfdruck einen Inhalt aus einem File ein und zeigt den gelesenen Text (in meinem Fall sind das einzelne Nodes aus einem XML-DOC) in einem Textfeld auf der Gui an. Mit einem weiteren Button kann man den Text (den man evtl. im Textfeld inzwischen manuell verändert hat) wieder in ein File speichern (d.h. das veränderte Node wird im XML-DOM entsprechend angepasst und dann das gesamte XML wieder abgespeichert).

    Was ist mein Problem:
    Bei der Modellierung mit MVC stoße ich auf folgendes Problem:
    Die View hat sich beim Model als Listener angemeldet. Sobald der Text aus dem File (= Daten im Model) eingelesen wird, informiert das Model die View, damit sich der Text im Textfeld aktualisiert. Soweit so gut. Wenn ich nun in der View den Text verändere und speichern will, muss das Modell den geänderten Text mitbekommen (Ich will ja die Daten aus dem Model speichern). Am besten wird das Model bereits nach der Manipulation des Textfeldes automatisch geändert (mit einem ChangeListener auf das Textfeld?). Dann trägt der Controller den neuen Text im Model nach. Da dann aber wieder die View angepasst wird und daraufhin der ChangeListener anschlägt habe ich eine Endlosschleife... ?

    Wie wird das übilcherweise realisiert? Was ich nicht will, sind Extra-Funktionen im Model, die Daten verändern, ohne dass die Listener benachrichtigt werden - das widerspräche ja dem Konzept und man könnte "hintenrum" Daten manipulieren, die dann so nicht auf der Oberfläche angezeigt werden.

    Kann mir da jemand helfen? Vielleicht auch mit einem kleinen Codebeispiel? Vielen Dank.

    Liebe Grüße

    BigBaer
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo bigbaer,

    am besten ist es wohl, wenn Du die Listener nur benachrichtigst, wenn auch tatsächlich eine Änderung erfolgt ist.
    Z.B.
    Feld A im Model hat den Wert 'foo'. Der View setzt den Wert 'bar' => Listener benachrichtigen
    Feld A im Model hat den Wert 'bar'. Der View setzt den Wert 'bar' => keine Benachrichtigung da keine Änderung

    Ein guter Moment um den Wert aus einem Textfeld in das Model zu übernehmen ist im übrigen der Fokus-Verlust.
  4. Autor dieses Themas

    bigbaer

    bigbaer hat kostenlosen Webspace.

    Vielen Dank. Habe es jetzt anders gelöst. Das Textfeld hat einen Focus-Changed-Event-Listener. Dieser updated das Model. Durch die Observation wird das Textfeld nochmal mit dem identischen Wert aktualisiert, aber das stört ja nicht. Da beim Aktualisieren der Werte jedoch kein Fokus verändert wird, gibt es an dieser Stelle kein Problem mit einer Endlosschleife.

    LG

    BigBaer
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!