НАЧАЛЬНЫЙ ВОПРОС (ОБНОВЛЕНО НИЖЕ)
Я использую список AutoPopulationList
для создания объекта, вызывающего конструктор с некоторыми параметрами. Что-то вроде кода ниже. Раньше я использовал его без каких-либо проблем, но сейчас не могу заставить его работать.
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
Но когда я отправляю эти параметры, Spring не может создать экземпляр объекта Node
, потому что он '
Кто-нибудь знает, почему это может происходить? Может ли это быть ошибкой?
Спасибо.
ОБНОВЛЕНИЕ
Я создал собственную реализацию списка, похожего на AutoPopulationList, чтобы проверить, была ли это проблема 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 ()?