Befehlsobjekte im Frühjahr
-
07-07-2019 - |
Frage
Ich habe ein Objekt Befehl besteht aus primitiven Feldern und einem Objektfeld. Wie binde ich meine Formularfelder auf die Felder im Objekt?
Ich habe versucht, dies zu tun, aber ohne Erfolg
<form:form commandName="course" method="POST">
<form:input path="activity.activity"/>
.
.
.
</form:form>
Ich bekomme diese Fehlermeldung
org.springframework.beans.NotReadablePropertyException:
Invalid property 'course' of bean class
My Command Klasse wie folgt ist
public class Course {
private long id;
private String owner;
private String title;
private List<LearningActivity> activity = new ArrayList<LearningActivity>();
//getters and setters
}
public class LearningActivity {
private long ID;
private String activity;
private String link;
//getters and setters
}
Lösung
Ihre Liste muss entweder mit so vielen LearningActivity Objekten vorgefüllt wird, wie Sie (mit Aktivität [0], Aktivität [1], etc.) zu beziehen planen oder es muss eine faule Liste. Eine faule Liste ist eine Liste, die sich mit leeren Objekten bevölkern werden, wenn ein bestimmte Index referenziert wird.
Ein Kommentar zeigt an, dass Sie Apache Commons LazyList sind versucht, zu verwenden, die funktionieren sollte - sind Sie eine Importrichtlinie fehlt? Doch als Alternative gibt es eine Quelle faul Liste Implementierung genannt AutoPopulatingList.
Andere Tipps
Zwei mögliche Probleme hier:
-
activity.activity
ungültig ist (es sei denn, Ihr Getter auf Ihre Mitgliedsvariablen entsprechen nicht), weilCourse.activity
eine Liste ist. Sie benötigen ein bestimmtes Listenelement zu adressieren - z.B.activity[0].activity
. Sie müssen auch sicherstellen, dass es tatsächlich existiert. -
Haben Sie Ihre FormController richtig konfiguriert? Hindurchgeht es
Course
Instanz zu betrachten, wie es sollte? Schauen Sie sich auf Spring MVC Tutorial für ein Beispiel.
Wenn Sie nach behoben haben # 1 und # 2 bestätigt, dass es richtig gemacht wird der Fehler nicht weggeht, bitte weitere Informationen veröffentlichen (FormController Kartierungs- / Quelle).