Domanda

ho messo il println() in ogni metodo di classe di azione.

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");
  //...
 }

Ho pensato che l'ordine sarebbe stato; preparare → → eseguire getModel.

Perché mi ricordo ho letto nel libro, così ho usato per la costruzione di classe di fagioli e fare alcune logiche in prepare(), e solo tornare successo nel execute(). E penso che getModel è per spingere il fagiolo per il valueStack, giusto?

... comunque la console mi ha mostrato questo. E 'molto strano; preparare → → getModel eseguire.

E questo sta diventando un problema enorme per me. E 'molto difficile spiegare il motivo in inglese ... ma ci proverò!

ho usato per creare ogni classe di azione che si occupa di stesse fagioli, e, naturalmente, ci sono stessi codici (variabili, e le loro getter e setter) duplicato in ogni classe di azione.

Ora sto cercando di creare un'azione per evitare che la duplicazione. Questa classe azione ha diversi metodi (mappati in struts.xml come questo; <action name="View_board" method="view">).

E come abbiamo visto nella console, questo view() è chiamato all'ultimo nella classe azione come execute(). Il prepare() non costruire solo i fagioli, e il view() fa un lavoro vero. Ma getModel() è chiamato prima di chiamare di view(), quindi non c'è alcuna possibilità di mettere i fagioli a ValueStack.

Spero che voi ragazzi a capire quello che sto cercando di spiegare.

Per riassumere, ci sono ogni classe di azione come BoardView, BoardDelete, BoardWrite ... e hanno funzionato bene! Ma io odio che le cose duplicati così ho creato classe BoardManager. Questa classe ha ogni metodo (come view()) che è stata trattata per classe (come BoardView). Ma questo punto di vista () è stato chiamato dopo la chiamata di getModel(), quindi il fagiolo (ritorno di getModel()) non ha alcuna possibilità di essere spinto al ValueStack.

Si prega di aiutarmi. Insegnami il vostro know-how nel settore. Sto sviluppando tutto da solo e questo mi fa sentire così difficile.

Grazie !!

È stato utile?

Soluzione

È necessario impostare l'oggetto del modello, dato che l'intercettore modeldriven può solo spingerla alla pila se non nullo. Se il vostro getModel () è simile al seguente:

SomeModelClass myModelObject = null;

public Object getModel()
{
   return myModelObject;
}

... si dovrà impostare il modelObject in modo che possa ottenere spinto al valueStack. Si potrebbe fare in questo modo immagino:

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

... o semplicemente inizializzare nel campo:

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

Non dimenticare di implementare le interfacce appropriate (ModelDriven e essere preparati). Spero che questo aiuti un po '.

Altri suggerimenti

Ho trovato la mia soluzione .. ma non una buona ..

Quando si imposta oggetto di dominio dai setter, spingo al valuestack manualmente ..

Funziona bene e solo 2 linee aggiunto alla mia classe.

Ma non mi sento che il bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top