Форум программистов, компьютерный форум, киберфорум
Java: Spring, Spring Boot
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.97/34: Рейтинг темы: голосов - 34, средняя оценка - 4.97
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94

Spring передача формы на контроллер

06.02.2015, 12:44. Показов 6570. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть контроллер вида
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//---------страница блюд---------
    @RequestMapping("/dishesall")
    public String listCatIngredients(Map<String, Object> map) {
 
        map.put("dishCat", new DishCategory());
        map.put("dish", new Dish());
        map.put("listTopDishCat", dishCategoryService.listTopDishCategories());
        map.put("listAllDishCat", dishCategoryService.listAllDishCategories());
 
        return "dishesAll";
    }
    //----------метод, который добавляет новое блюдо--------------------
    @RequestMapping(value = "/addnewdish", method = RequestMethod.POST)
    public String addNewDish(@ModelAttribute("dish") Dish dish, HashMap<Integer,Integer> map,
                                  BindingResult result) {
        dishService.addDish(dish,map);
        return "redirect:/dishesall";
    }
Я хочу добавить новое блюдо. Передать объект dish я могу и все работает. А вот как в той же форме передать мап, где первый инт - это айди другого обьекта, а второй - количество. Вот моя форма
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<form:form method="post" action="addnewdish" commandName="dish">
  <table>
  <tr>
      <td>
        <form:label path="dishName">
          Название блюда
        </form:label>
      </td>
      <td>
        <form:input path="dishName" />
      </td>
  </tr>
  <tr>
      <td>
        <form:label path="cooking">
          Описание приготовления
        </form:label>
      </td>
      <td>
        <form:input path="cooking" />
      </td>
  </tr>
  <tr>
      <td>
        <form:label path="dishPortionNumber">
          Количество порций
        </form:label>
      </td>
      <td>
        <form:input path="dishPortionNumber" />
      </td>
  </tr>
  <tr>
      <td>
        <form:label path="dishCategoryId">
          Категория блюда
        </form:label>
      </td>
      <td>
        <form:select path="dishCategoryId">
            <c:if test="${!empty listAllDishCat}">
              <c:forEach items="${listAllDishCat}" var="dishCat">
 
                <form:option value="${dishCat.dishCategoryId}">${dishCat.dishCategoryName}<=${allCats.get(dishCat.topDishCategoryId).dishCategoryName}<=${allCats.get(allCats.get(dishCat.topDishCategoryId).topDishCategoryId).dishCategoryName}</form:option>
 
              </c:forEach>
            </c:if>
        </form:select>
      </td>
  </tr>
    <tr>
      <td colspan="2"><input type="submit"
                             value="Добавить" /></td>
    </tr>
  </table>
</form:form>
Помогите пожалуйста
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.02.2015, 12:44
Ответы с готовыми решениями:

Как передать id из формы в контроллер Spring
Имеется форма для редактирования студента в которой есть разные input типа &lt;div class=&quot;col-7...

Передача формы в сессию Spring MVC
Объясните пожалуйста, что я делаю не так. Проверяю форму, посылаемую ajax'ом и сразу создаю объект Хочу передать его в сессию, но не...

Spring MVC. Контроллер, убирающий слэш
В проекте Spring MVC есть страница, лежащая в папке /pages/index1.jsp. В конфиге есть такие строки: &lt;bean...

7
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
06.02.2015, 18:22
Цитата Сообщение от TAHKICT Посмотреть сообщение
где первый инт - это айди другого обьекта, а второй - количество.
По понятному попробуйте
0
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94
06.02.2015, 19:27  [ТС]
KuKu, уже немого переиграл. Теперь проблема в другом. У меня контроллер принимает просто хэшмап
Java
1
2
3
4
5
6
@RequestMapping(value = "/addnewdish", method = RequestMethod.POST)
    public String addNewDishTest(@ModelAttribute("dishMap")HashMap<String,String> map,
                                  BindingResult result) {
        dishService.addNewDishTest(map);
        return "redirect:/dishesall";
    }
метод работает на вот этой странице
Java
1
2
3
4
5
6
7
8
9
10
11
@RequestMapping("/dishesall")
    public String listCatIngredients(Map<String, Object> map) {
 
        map.put("dishCat", new DishCategory());
        map.put("dish", new Dish());
        map.put("dishMap",new HashMap<String,String>());
        map.put("listTopDishCat", dishCategoryService.listTopDishCategories());
        map.put("listAllDishCat", dishCategoryService.listAllDishCategories());
 
        return "dishesAll";
    }
обрабатываю HashMap я на уровне сервиса
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
@Transactional
    public void addNewDishTest(HashMap<String, String> map) {
        String dishName, cooking;
        Integer dishCategoryId,dishPortionNumber;
        Dish dish = new Dish();
        for (String key:map.keySet()){
            if(key.equals("dishName")){
                dishName = map.get("dishName");
                dish.setDishName(dishName);
            }
            else if(key.equals("cooking")){
                cooking = map.get("cooking");
                dish.setCooking(cooking);
            }
            else if(key.equals("dishCategoryId")){
                dishCategoryId = Integer.parseInt(map.get("dishCategoryId"));
                dish.setDishCategoryId(dishCategoryId);
            }
            else if(key.equals("dishPortionNumber")){
                dishPortionNumber = Integer.parseInt(map.get("dishPortionNumber"));
                dish.setDishPortionNumber(dishPortionNumber);
            }
            else {
                DishIngredients dishIngredients = new DishIngredients();
                dishIngredients.setDishes(dish);
                dishIngredients.setIngredient(ingredientDAO.getIngredientById(Integer.parseInt(key)));
                String value = map.get(key);
                Integer quantity = null;
                Integer meraId = null;
 
                int m = value.indexOf("/");
                for (int i = 0; i < m; i++) {
                    StringBuilder count = new StringBuilder();
                    char c;
                    c = value.charAt(i);
                    if(c != '/')
                        count.append(c);
                    quantity = Integer.parseInt(count.toString());
                }
                for (int i = m; i < value.length(); i++) {
                    StringBuilder SBmera = new StringBuilder();
                    char c;
                    c = value.charAt(i);
                    if(c != '/')
                        SBmera.append(c);
                    meraId = Integer.parseInt(SBmera.toString());
                }
                dishIngredients.setQuantity(quantity);
                dishIngredients.setMeraId(meraId);
            }
        }
Вопрос вот в чем. Как на jsp странице правильно заполнить Map? Некоторые ключи что бы были статически забиты(только значения вводим), а некоторые ключи и значения формировались динамически (в зависимости от того что введем)
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
06.02.2015, 22:44
В чем итоговая цель этих манипуляций? - с мапой работать в таком виде обычно не самый хороший способ.
0
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94
07.02.2015, 18:23  [ТС]
KuKu, мне просто надо передать одновременно 2 объекта. Ну решил просто передать мап и по ключам заполнять соотвественные атрибуты обьектов. А еще мап для того, что объектов одного из типов может быть много.
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
07.02.2015, 18:40
Для нескольких объектов обычно используют обычный List. Map есть, только там объекты вроде как нельзя биндить.
0
1 / 1 / 0
Регистрация: 17.09.2014
Сообщений: 94
07.02.2015, 18:52  [ТС]
KuKu, я как раз эту статью и нашел. Просто что до этого не приходилось мне добавлять сложные объекты такие. Эта форма добавляет у меня объект "блюдо". Если бы была задача просто заполнить атрибуты, то тут бы проблем не была. А тут я заполняю атрибуты самого объекта, но плюс к этому всему я привязываю к нему ингредиенты, а это уже объекты другого типа (их может быть большое количество). Поэтому мап тут вроде как самый подходящий. Или лучше с помощью листа? Правда парсер надо будет писать.
0
138 / 7 / 1
Регистрация: 31.03.2015
Сообщений: 395
17.01.2017, 18:01
Я вот тоже хочуть запустить в spring mvc пример использования формы, но почему то готовый проэкт (код) не запускается:
https://www.tutorialspoint.com... xample.htm.
Форма открывается - но после ввода даных в поля и кликания кнопки -- получаю ошибку:
HTTP Status 404 - /HelloWorld/addStudent
...
description The requested resource is not available.
Понимаю, что проблема в биндинге даных формы и передачей в контролер или в вид.
Очевидно что проблема в этой часте кода:
Java
1
@ModelAttribute -- public String addStudent(@ModelAttribute("SpringWeb")Student student,
И особенно в @ModelAttribute("SpringWeb") где под значением записано название war файла, который не относится к коду
на джаве а есть результатом экспорта проэкта на сервер Tomcat7.
Не особенно знаком со спрингом но по примеру я не использую Мейвен,
и две библиотеки -- org.springframework.asm-x.y.z.jar и spring-web.jar (который похож org.springframework.web-x.y.z.jar), которых не могу найти для фрейморка 2.3.4.
Потом обозначаю название формы атрибутом commandName и ModelAttribute,
который собственно передаю в @ModelAttribute(result1)
-- но получаю ошибку уже на этапе запуска самой формы -- localhost:8080/name/student --(в первом случае пустая форма открывается)--
HTML5
1
2
3
4
5
6
<form:form method="POST" action="/fff/addStudent" commandName="result1">
<table>
<tr>
[B]<td><form:label path="name">Name</form:label></td>[/B]
<td><form:input path="name" /></td>
</tr>
Выделенный фрагмент вызывает JasperException, c указанием этого выделенной строки:
<form:label path="name">Name</form:label>
В тоже время Root Cause называется NoSuchBeanDefinitionException:
Почему такой простой пример не работает что собственно совпадает с условием этой темы форума?
С вышеприведенного примера я разве изменил название проэкта с HelloWorld на более простой но в первом же случае это не помешало открытся форме.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.01.2017, 18:01
Помогаю со студенческими работами здесь

Spring Security Как реализовать login контроллер
При аутентификации пользователя я получаю куки, который я использую для авторизации и дальнейшего использования некоторых контроллеров....

Контроллер обрабатывает статический ресурс, Spring Boot
Как настроить в Spring Boot, чтобы контроллер не обрабатывал статические ресурсы? Контроллер: @RequestMapping(value =...

Spring Boot + React, не срабатывает контроллер при нажатии <Link></Link>
Добрый день! Код в реакте: class App extends React.Component { render() { var type = 'hello'; ...

Передача элементов HTML в контроллер
Добрый день. Подкскажите, как лучше и правильнее сделать. На странице, через JS добавляются элементы на страницу. Например в div по...

spring-mvc передача данных из контроллера в view
у меня возникла проблема. пробую писать жалкое подобие сайта на Java. и мне необходимо передавать данные между контроллером и вьюхой....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru