Я использую Springs MVC 3.0.x для загрузки файла CSV.Прочитав статью Карсона Макдональда , я обнаружил, что загрузить файл довольно просто.В своем примере он называет свою модель UploadItem
.Моя модель называется CsvFile
, это просто POJO.
Я хотел улучшить модель, чтобы она также содержала источник данных.Итак, я определил bean-компонент источника данных в xml и создаю его экземпляр при вызове метода GET.Объект имел хеш-код 3fa980b.Конструктор, который принимает источник данных, был вызван, как и ожидалось, при загрузке файла конфигурации Spring Bean.Затем я добавляю его в org.springframework.ui.Model.
@RequestMapping( method = RequestMethod.GET)
public String getUploadForm(Locale locale, Model model) {
ApplicationContext context = new ClassPathXmlApplicationContext("observation-service.xml");
CsvFile csvFile = (CsvFile)context.getBean("csvfile");
logger.info("csvfile in get " + csvFile.toString() );
model.addAttribute("csvFile",csvFile);
return "npnSubmitData";
}
Следующий шаг застал меня врасплох.Когда вызывается обработчик POST, вызывается конструктор по умолчанию для CsvFile.Это обеспечивает доступ к объекту CsvFile, но отличается от хеш-кода 53b5168d, а источник данных имеет значение null.Я ожидал, что тот же объект будет возвращен.
@RequestMapping(method = RequestMethod.POST)
public String create(CsvFile csvFile, BindingResult result) {
logger.info("upload file. " + csvFile.toString());
if (result.hasErrors()) {
return "npnSubmitData";
}
return "populated";
}
Почему исходный объект не возвращается?