Ich habe ein logic:iterate
in einem logic:iterate
. Ich kann alle Felder in dieser Tabelle bearbeiten. Für jede logic:iterate
habe ich eine getXXX
Zeilenmethode.Streben 1 - Iteration in Iteration - innere Reihe Methode
Zuerst klicke ich auf meinen'add'-Knopf. Die Iteration wurde mit 3 Personen gefüllt. Zuerst eine Adresse, die zweite zwei und die dritte drei. (In der realen Anwendung ist es dynamisch)
Jetzt ändere ich einige Eingabefelder und klicke auf meine Senden-Schaltfläche. Jetzt werden die Zeilenmethoden aufgerufen, um den alten Zustand zu initialisieren. Aber wie implementiere ich die Zeilenadressenmethode richtig? Es wird nur dreimal aufgerufen, aber ich muss die Personenfelder genau ausfüllen und zurückbekommen, oder?
Hoffe es ist eine bessere Beschreibung für mein Problem als im letzten Thread.
EDIT: Versuchen Sie es besser zu erklären. Ich habe eine Personlist und in meiner getRowPerson-Methode gibt es kein Problem, da der "Index" nur aus dieser Liste ist. ABER ich habe jetzt in diesem Beispiel drei Adresslisten, ich kann nicht sagen welche "Liste" die getRowAdresse aufruft. (An dieser Stelle muss ich eine Adresse von der richtigen Person mit dem richtigen Index zurückgeben, aber ich kenne die Person nur die Position in Adressliste)
Wenn die getRowAdress in der Personenklasse waren, ist es auch anders, aber dort es hat nie angerufen.
Das andere Problem ist, dass die getRowAdress nur dreimal genannt wird, meiner Meinung nach, sollte ich einmal für jede Adresse Zeile Artikel genannt werden. Für mein Beispiel sechs Mal. Ich denke, mit der inneren Iteration stimmt etwas nicht. Ich habe versucht, verschachtelt: Iteration aber funktioniert auch nicht.
Console:
adress index2<br>
adress index1<br>
adress index0<br>
person index1<br>
person index2<br>
person index0<br>
Html:
<logic:iterate id="rowPerson" name="iterateForm" indexId="rowIndex" property="persons" >
<html:text name="rowPerson" property="name" indexed="true"/>
<logic:iterate id="rowAdress" name="rowPerson" indexId="rowAdressIndex" property="address" >
<html:text name="rowAdress" property="addressname" indexed="true"/>
</logic:iterate>
<br>
</logic:iterate>
<html:submit value="Send" property="submitvalue"/>
<html:submit value="Add" property="submitvalue"/>
</html:form>
Aktion
public class HelloWorldAction extends Action {
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
HelloWorldForm helloWorldForm = (HelloWorldForm) form;
String submitvalue = request.getParameter("submitvalue");
if (submitvalue == null) {
return mapping.findForward("success");
} else if ("Add".equals(submitvalue)) {
for (int i = 0; i < 3; i++) {
PersonForm person = new PersonForm();
person.setName("Person " + i);
for(int y = 0 ; y <= i ; y++){
AddressForm add = new AddressForm();
add.setAddressname("Adress" + y);
person.getAddress().add(add);
}
helloWorldForm.getPersons().add(person);
}
}
return mapping.findForward("success");
}
}
ActionForm-
public class HelloWorldForm extends ActionForm{
private static final long serialVersionUID = -473562596852452021L;
private List<PersonForm> persons = new ArrayList<>();
public PersonForm getRowPerson(int index){
System.out.println("person index" + index);
while(persons.size() <= index){
persons.add(new PersonForm());
}
return persons.get(index);
}
public AddressForm getRowAdress(int index){
System.out.println("adress index" + index);
// ???? dont know ???
return new AddressForm();
}
public List<PersonForm> getPersons() {
return persons;
}
public void setPersons(List<PersonForm> persons) {
this.persons = persons;
}
}
Personform und Address haben nur Setter & Getter
Die Frage sieht etwas verwirrend aus. Können Sie weitere Details hinzufügen oder die Frage anders formulieren? Besonders konnte ich nicht bekommen, wenn Sie sagen, wie ich die Zeilenadressmethode richtig implementiere? Es wird nur dreimal aufgerufen, aber ich muss genau die Personenfelder ausfüllen und sie zurückbekommen, oder? ' –
ich bearbeite meine Frage hoffe es hilft – pL4Gu33