Frage

Ich habe die println() in jede Methode der Action-Klasse.

public String execute() throws Exception {
  System.out.println("execute");
  //...
 }
 public void prepare() throws Exception {
  System.out.println("prepare");
  //...
 }
 public Object getModel() {
  System.out.print("getModel");
  //...
 }

Ich dachte, die Ordnung sein würde; Vorbereitung ? ? getModel auszuführen.

Weil ich erinnere ich es im Buch zu lesen, so dass ich verwenden Bohnen Klasse zu konstruieren und einige Logiken in prepare() zu tun und kehre nur SUCCESS in execute(). Und ich denke, getModel ist die Bohne zum valueStack zum Schieben, nicht wahr?

... wie auch immer die Konsole zeigte mir dies. Es ist sehr seltsam; Vorbereitung ? getModel ? ausführen.

Und das ist ein großes Problem für mich wird. Es ist sehr schwer, den Grund in Englisch zu erklären ... aber ich werde versuchen!

ich verwendet, um jede Aktion-Klasse zu erstellen, die mit dem gleichen Bohnen beschäftigt, und natürlich gibt es dieselben Codes (Variablen und deren Getter und Setter) dupliziert in jeder Aktion-Klasse.

Jetzt versuche ich, eine Aktion zu erstellen, dass Doppelarbeit zu vermeiden. Diese Aktion Klasse verfügt über mehrere Methoden (abgebildet in struts.xml wie diese; <action name="View_board" method="view">).

Und wie wir in der Konsole gesehen wird dieser view() in dem letzten in der Action-Klasse wie execute() genannt. Die prepare() nicht bauen nur Bohnen und die view() tut echte Arbeitsplätze. Aber getModel() wird aufgerufen, bevor die view() Aufruf, so gibt es keine Chance, die Bohnen zu setzen, um ValueStack.

Ich hoffe, euch zu verstehen, was ich zu erklären, ich versuche.

Um es zusammenzufassen, gibt es jede Aktion Klasse wie BoardView, BoardDelete, BoardWrite ... und sie hat gut funktioniert! Aber ich hasse es, dass duplizierte Dinge so ich BoardManager Klasse erstellt. Diese Klasse hat jede Methode (wie view()), die von der Klasse (wie BoardView) behandelt wurde. Aber diese Ansicht () wurde nach dem Aufruf von getModel() genannt, so die Bohne (Rückkehr von getModel()) hat keine Chance auf die ValueStack geschoben werden.

Bitte helfen Sie mir. Bringen Sie mir Ihr Know-how in diesem Bereich. Ich bin alles auf meine eigene Entwicklung und das macht mich so hart anfühlen.

Danke !!

War es hilfreich?

Lösung

Sie haben das Modell Objekt selbst zu setzen, wie die Modellgetriebene Abfangjäger nur kann es auf den Stapel, wenn die nicht null drücken. Wenn Ihr getModel () sieht wie folgt aus:

SomeModelClass myModelObject = null;

public Object getModel()
{
   return myModelObject;
}

... Sie werden die modelObject setzen müssen, damit es auf die valueStack geschoben bekommen kann. Man könnte es auf diese Art und Weise kann ich denke:

public void prepare(){
   myModelObject = new myModelObject("I'm so new");
}

... oder einfach nur initialisieren es im Feld:

SomeModelClass myModelObject = new myModelObject("I'm so new");

Vergessen Sie nicht über die entsprechenden Schnittstellen (Modellgetriebene und herstellbaren) zu implementieren. Hoffe, das hilft ein wenig.

Andere Tipps

fand ich meine eigene Lösung .. aber nicht gut ..

Wenn durch Setter Domain-Objekt einstellen, schiebe ich es auf das valuestack manuell ..

Es funktioniert gut und nur 2 Zeilen zu meiner Klasse hinzugefügt.

Aber ich glaube nicht, dass ein gutes Gefühl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top