НАЧАЛЬНОГО ВОПРОСА (ОБНОВЛЕН НИЖЕ)Weird проблемы при связывании динамического списка
Я использую AutoPopulatingList
список instatiate объекта вызывающего конструктор с некоторыми параметрами. Что-то вроде кода ниже. Я использовал его без проблем, но сейчас я не могу заставить его работать.
public class Tree {
...
private List<Node> nodes = new AutoPopulatingList<Node>(new ElementFactory<Node>() {
@Override
public Node createElement(final int index) throws ElementInstantiationException {
//call custom controller
return new Node(index, ...other params);
}
});
...
//getters & setters
}
Объект отображается в контроллере в качестве атрибута модели (@ModelAttribute Tree
парам). Поэтому я посылаю в значениях формы, как:
nodes[0].field1 = some value
nodes[1].field2 = other value
Но когда я посылаю эти параметры пружина не может создать экземпляр Node
объекта, поскольку он ищет конструктора без Params для Node
объекта, и он бросает исключение, как следующее:
org.springframework.beans.NullValueInNestedPathException: Invalid свойство 'узлы' класса боба [... Node]: не удалось создать экземпляр тип недвижимости [... Node] для автоматического увеличения вложенного пути свойства: java.lang .InstantiationException: ... Узел.()
Если я добавлю конструктор без параметров в класс Node
, нет ошибки, но когда я отправляю nodes[0]
, он вызывается Node()
вместо того, чтобы использовать ElementFactory
.
Странно, что если я делаю в контроллере treeObject.getNodes().get(0)
, вызываемый конструктор - это тот, у кого есть параметры (как и должно быть).
Я использую Spring 3.0.4.RELEASE.
Кто-нибудь знает, почему это может произойти? Это может быть ошибка?
Спасибо.
UPDATE
У меня есть создать собственную реализацию списка аналогично AutoPopulatingList, чтобы проверить, была ли это проблема AutoPopulatingList, но это происходит такое же поведение. Реализация просто переопределяет:
public Node get(int index) {
//here just creates the object it it doesn't exist in the position
}
Так что проблема, почему, когда я в контроллере:
public String controllerMethod(
@ModelAttribute Tree tree, BindingResult result, Model model){
...
}
и отправляю узлов [0] .something как нет какой-либо объект в позиции 0 индекса, он должен иметь экземпляр объекта. Но проблема в том, что он вызывает конструктор Node() перед вызовом tree.get (0). Итак, почему Spring вызывает конструктор по умолчанию? Как заставить его использовать tree.get (0) для экземпляра объекта вместо Node()?
Вы сказали: «Я использовал это без проблем, но я не могу заставить его работать сейчас». - Что ты изменил? – Ralph
Для меня это похоже, если кто-то удаляет список узлов из Дерева, прежде чем Spring начнет его заполнять. – Ralph
@Ralph Я только изменил версию Spring (хотя это была и Spring 3) и, очевидно, объект, потому что я использовал его в других проектах. Но я не изменил способ использования. – Javi