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

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

06.02.2015, 12:44. Показов 6538. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru