2009-07-31 1 views
3

У меня есть веб-страница JSP формы, эта форма содержит несколько экземпляров одного и того же объекта Java, Я использую Java Spring Framework для управления «связью» с контроллером и вид.Получение массива объекта из веб-формы с использованием Spring framework

Моя проблема заключается в том, что я хотел бы получить от представления простой массив, содержащий экземпляры моих объектов, которые в настоящее время находятся на странице (вероятно, были изменены).

Когда я хочу определенный тип элемента, я обычно называю его только в объявлении метода моего контроллера, однако для массива (или любой коллекции) это не сработает.

так что-то вроде:

@RequestMapping 
public String edit(...SomeObject[] objectName, ...){ 
} 

бы просто вернуть мне ошибку, я, однако, может получить массив String, так это работает:

@RequestMapping 
public String edit(...String[] objectString, ...){ 
} 

цель будет иметь возможность make Spring автоматически отображает объект Спасибо за ваши ответы!

ответ

0

Spring не знает, как создать свой настраиваемый объект из строки, поэтому вам нужно будет создать свой собственный PropertyEditor для своего настраиваемого объекта.

Chapter 5 из справочника Spring объясняет привязку данных, а в главе 13 указывается example, как регистрировать редакторы специальных свойств в вашем контроллере.

+0

Если вы конвертируете что-то вроде строки в дату, да, конечно, нужны редакторы свойств. Однако, если вы отправляете форму с foo = a, foo = b и foo = c, Spring MVC достаточно умен, чтобы превратить это в список с именем «foo» ... –

+0

я был смущен о initBinder и что было редактором свойств, но я нашел пример http://robobruin.blogspot.com/2007/09/spring-initbinder-example-that.html – Gadgetsan

+0

вещь, которую мне нужно получить, это нечто вроде foo.atr1 = a foo.atr2 = b Список foo – Gadgetsan

2

Это, безусловно, возможно; в то время как я не сделал это с помощью @RequestMapping, я знаю, что вы можете получить коллекцию это может быть сделано с «командой» объектом (или @ModelAttribute)

Определением POJO с атрибутом коллекции в качестве команды

public class FooCommand { 
    private List<String> myCollection; 
    // Getter & Setter 
} 

Затем откройте его в контроллере

@RequestMapping(value = "/foo", method = RequestMethod.POST) 
public String processSubmit(@ModelAttribute("fooCommand") FooCommand fooCmd) { 
    // do stuff with fooCmd.getMyCollection() 
} 

это имеет никакого смысла?

+0

, который работает, однако, мне нужно, чтобы иметь возможность получать что-то, кроме строки, мне хотелось бы, чтобы Spring автоматически сопоставляла полученную строку с POJO – Gadgetsan

+0

Какой объект? Если вы можете обрабатывать такие вещи, как string, long, int, char (я думаю), но если это более сложный объект, вам нужно будет работать с редактором свойств, упомянутым Mark. –

+0

мой объект содержит строки и целые числа, он может отображать 1 элемент, проблема возникает, когда я пытаюсь сопоставить массив или список элементов – Gadgetsan