Командные объекты в Spring

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

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

<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
}

person Jeune    schedule 15.09.2009    source источник


Ответы (2)


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

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

person Jacob Mattison    schedule 16.09.2009

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

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

  2. Вы правильно настроили FormController? Он передает экземпляр Course для просмотра, как следует? Взгляните на руководство по Spring MVC для примера.

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

person ChssPly76    schedule 15.09.2009
comment
Я пытался сделать № 1, но получаю исключение IndexOutOfBoundsException. Я нашел этот учебник: mattfleming.com/node/134 и попытался выполнить List‹LearningActivity› acitivity = LazyList.getList(new List‹LearningActivity›()); но я получаю NoClassDefFoundError: org/mortbay/util/LazyList. Я уже пытался поместить commons-collection.jar в свой путь сборки и в свой путь web-inf/lib, но почему-то приложение все еще не находит меня. - person Jeune; 16.09.2009
comment
Вы получаете IndexOutOfBounds, потому что ваш список пуст. Как я уже сказал выше, вам нужно убедиться, что элемент списка действительно существует. Почему вы используете список для начала? Вы собираетесь редактировать несколько действий на одной странице? Если это так, вам нужно будет перебрать список. Если нет, рассмотрите возможность представления текущей активности как свойства с одним значением. - person ChssPly76; 16.09.2009
comment
Получил это, чтобы работать! Я использовал Lazy List в jakarta commons, чтобы заполнить свой список. Спасибо! - person Jeune; 17.09.2009