2009-09-15 5 views
4

У меня есть объект команды, состоящий из примитивных полей и поля объекта. Как связать поля формы с полями в объекте?Командные объекты весной

Я попытался сделать это, но безрезультатно

<form:form commandName="course" method="POST"> 
    <form:input path="activity.activity"/> 
     . 
     . 
     . 
</form:form> 

Я получаю эту ошибку

org.springframework.beans.NotReadablePropertyException: 
     Invalid property 'course' of bean class 

Мой класс Command, как это

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 
} 

ответ

3

Ваш список должен быть предварительно заполнен таким количеством объектов LearningActivity, что вы планируете ссылаться (используя активность [0], активность [1] и т. Д.), Или это должен быть ленивый список. Ленивый список - это список, который будет заполнять себя пустыми объектами при указании данного индекса.

Комментарий указывает, что вы пытаетесь использовать Apache Commons LazyList, который должен работать - вам не хватает директивы импорта? Однако в качестве альтернативы существует реализация Spring lazy list под названием AutoPopulatingList.

2

Два возможных проблем здесь:

  1. activity.activity недействителен (если ваши геттеры не соответствуют вашим переменным-членам), потому что Course.activity - это список. Вам нужно обратиться к определенному элементу списка - например. activity[0].activity. Вы также должны убедиться, что он действительно существует.

  2. Вы сконфигурировали свой FormController правильно? Проходит ли он для примера Course? Посмотрите на пример Spring MVC tutorial.

Если после того, как вы исправили # 1 и проверить, что # 2 сделано правильно ошибка не исчезает, пожалуйста, напишите более подробную информацию (FormController отображение/источник).

+0

Я пробовал делать # 1, но получаю исключение IndexOutOfBoundsException. Я нашел этот учебник: mattfleming.com/node/134 и попытался сделать List acitivity = LazyList.getList (новый List ()); но я получаю NoClassDefFoundError: org/mortbay/util/LazyList. Я уже пробовал поместить commons-collection.jar в свой путь сборки и в мой путь к web-inf/lib, но как-то приложение все еще не находит i – Jeune

+0

Вы получаете 'IndexOutOfBounds', потому что ваш список пуст. Как я уже сказал выше, вам нужно убедиться, что элемент списка фактически существует. Зачем вы используете этот список? Вы собираетесь редактировать несколько действий на одной странице? Если это так, вам нужно будет перебирать список. Если нет, рассмотрите возможность выставления текущей активности как однозначного свойства. – ChssPly76

+0

Получил это, чтобы работать! Я использовал Lazy List в jakarta commons для заполнения моего списка. Благодаря! – Jeune

Смежные вопросы