2009-04-27 14 views
0

Ohne Verwendung von DynaForm und es ist Kin.Was ist eine gute Möglichkeit, mehrreihige Aktualisierungen in Struts (mit Struts live) durchzuführen?

Ich mag würde ein POJO Datentransferobjekt verwenden, zB Person:

public class Person { 
    private Long id; 
    private String firstName; 
    private String lastName; 
    // ... getters/setters for the fields 
} 

In den Streben Aktionsform leben würden wir:

public class PersonUpdateForm extends SLActionForm { 
    String organization; 
    Person[] persons; // all the people will be changed to this organization; they're names and so forth can be updated at the same time (stupid, but a client might desire this) 

    // getters/setters + index setters/getters for persons 

} 

Was wäre die entsprechenden html: text Tags sehen in der JSP so aus? Wenn ich zu einem Listenpersonenfeld wechsle und eine Lazy-Loading-Liste (in Commons-Sammlungen) verwende, wie würde sich das ändern?

Es scheint kein guter Weg, dies in struts- 1.2 zu tun (0,9?)

Alle Hilfe wird sehr geschätzt !!! Wenn Sie mehr Kontext benötigen, lassen Sie es mich wissen und ich kann Ihnen einige zur Verfügung stellen.

+0

Okay, ich glaube ich habe es herausgefunden! Der Trick besteht darin, dass Ihr indizierter Getter jedes Mal ein Element erstellt, wenn die Methode getPersons() von der populate-Methode von BeanUtils aufgerufen wird. Der Code ist noch fertig, aber ich habe ein positives Ergebnis bekommen. Es ist 3:30 Uhr und ich bin eine Weile hier festgefahren. Niemand schien die Antwort zu wissen, was mich dazu bringen würde, sie mit einer Forelle in den Kopf zu schlagen. Was meine eigene Ignoranz betrifft ... Ich habe nur die Schuld! – les2

Antwort

1

Okay, ich glaube, ich habe es herausgefunden! Der Trick besteht darin, dass Ihr indizierter Getter jedes Mal ein Element erstellt, wenn die Methode getPersons() von der populate-Methode von BeanUtils aufgerufen wird. Der Code ist noch fertig, aber ich habe ein positives Ergebnis bekommen. Es ist 3:30 Uhr, und ich bin eine Weile dabei geblieben. Niemand schien die Antwort zu wissen, was mich dazu bringen würde, sie mit einer Forelle in den Kopf zu schlagen. Was meine eigene Ignoranz betrifft ... Ich habe nur die Schuld!

public List<Person> getPersons() { 
    persons.add(new Person()); // BeanUtils needs to know the list is large enough 
    return persons; 
} 

Fügen Sie Ihre indizierten Getter und Setter natürlich hinzu.

Ich erinnere mich, wie ich das tat. Sie müssen die obige Personenliste auf die maximale Größe vorinitialisieren, die Sie voraussichtlich übertragen möchten. Dies liegt daran, dass die Liste zuerst in ein Array konvertiert wird, die Eigenschaften dann für jedes Element des Arrays festgelegt werden und schließlich die Liste mithilfe von setPersons (...) zurückgesetzt wird. Daher wird die Verwendung einer lazy-ladenden List-Implementierung oder eines ähnlichen Ansatzes (wie oben gezeigt) NICHT mit Struts live funktionieren. Hier ist, was Sie im Detail tun müssen:

private List<Person> persons = new ArrayList<Person>(MAX_PEOPLE); 
public MyConstructor() { for(int i = 0; i < MAX_PEOPLE; i++) persons.add(new Person()); } 

public List<Person> getPeopleSubmitted() { 
    List<Person> copy = new ArrayList<Person>(); 
    for(Person p : persons) { 
     if(p.getId() != null) copy.add(p); 
     // id will be set for the submitted elements; 
     // the others will have a null id 
    } 
    return copy; // only the submitted persons returned - not the blank templates 
} 

Das ist im Grunde, was Sie tun müssen! Aber die eigentliche Frage ist - wer benutzt die Struts noch ?!