Я новичок в разработке Spring MVC и JSP, поэтому, пожалуйста, будьте осторожны, рассказывая мне, что я делаю что-то глупое: P Сказал, что вопрос:
Я немного изучил Spring MVC и получил хорошийкусок рабочего кода.Теперь я застрял на явно глупой проблеме: кажется, я не могу вернуть объекты, которые я передаю, JSP обратно в контроллер.Что мне нужно сделать, так это: пользователь заполняет два текстовых поля, затем он нажимает кнопку, и система должна запросить БД, найти элемент, который искал пользователь, добавить найденный элемент в массив «capitolospesas» и выполнить повторную визуализацию.jsp со всеми объектами в массиве (предыдущий + только что добавленный).
Созданный мной цикл: controller ---> jsp ---> controller ---> jsp.Сопоставление «newProposte» инициализирует страницу newEditProposte.jsp с пустыми значениями, jsp правильно получает отображаемые значения, пользователь редактирует / заполняет то, что необходимо, и нажимает кнопку «Отправить».Элемент управления переходит к методу «selectCapitoloSpesaFromProposte», где система должна выполнить запрос и добавить результат в массив «capitolospesas», но он всегда пуст, когда я добавляю новый объект, поэтому на странице он отображает только последний найденный элемент.
@RequestMapping("/newProposte")
public ModelAndView newProposte()
{
System.out.println("ProposteController.newProposte()");
ModelAndView mav = new ModelAndView();
mav.addObject("proposte", new ProposteWeb());
mav.addObject("newFlag", true);
mav.addObject("capitolospesas", new HashSet<Capitolospesa>());
mav.setViewName("proposte/newEditProposte.jsp");
return mav;
}
@RequestMapping("/selectCapitoloSpesaFromProposte")
public ModelAndView selectCapitoloSpesaFromProposte(@ModelAttribute ProposteWeb proposte, @ModelAttribute HashSet<Capitolospesa> capitolospesas)
{
ModelAndView mav = new ModelAndView();
mav.addObject("proposte", proposte);
mav.addObject("newFlag", true);
capitolospesas.add(capitolospesaDAO.findCapitolospesaByCapitoloSpesaCapitoloAndCapitoloSpesaArticolo(proposte.getCapitoloSpesaCapitoloProposte(), proposte.getCapitoloSpesaArticoloProposte()));
mav.addObject("capitolospesas", capitolospesas);
mav.setViewName("proposte/newEditProposte.jsp");
return mav;
}
JSP:
<script language="Javascript">
function selectCapitoloSpesa()
{
alert("selectCapitoloSpesaFromProposte");
document.getElementById("tabProposteForm").action = "${pageContext.request.contextPath}/selectCapitoloSpesaFromProposte";
submitForm();
return true;
}
function submitForm()
{
alert("submit");
document.getElementById("tabProposteForm").submit();
return true;
}
</script>
....
....
the form
....
....
the foreach iterating on the array "capitolospesas" showing it in a table
....
....
<input type="button" value="selectCapitoloSpesaFromProposte" name=selectCapitoloSpesaFromProposte onclick="return selectCapitoloSpesa();">
Я сделал пост таким образом, потому что в зависимости от нажатой кнопки (есть разные кнопки), форма должна работать по-разному.
Я прочитал во всех руководствах, что для передачи параметров на страницу jsp мне нужно добавить их в объект ModelAndView, и я правильно делаю это.В jsp у меня есть доступ ко всем объектам, которые я передаю, в данном случае «newFlag», «capitolospesas» и «offerte».Что я не понимаю, как я могу получить эти объекты, когда они возвращаются из JSP?До сих пор я использовал аннотацию @ModelAttribute перед единственным параметром, который мне был нужен для сохранения, редактирования или удаления единственной сущности, которая была у меня на странице, но теперь мне нужно получить несколько объектов со страницы.В приведенном выше коде я несколько раз пытался использовать аннотацию @ModelAttribute, но безуспешно;объект «предложить» правильно заполнен вещами, набранными пользователем, но я отлаживал код, чтобы обнаружить, что каждый раз, когда запускается метод «selectCapitoloSpesaFromProposte», создается новый массив «capitolospesas» вместо получения значений из массива, который я передал ранеена jsp.
Если у кого-либо есть какие-либо предложения, пожалуйста, напишите их.