169 похожих чатов

Есть те, кто может пояснить как работают getmapping и postmapping

в спринге?

12 ответов

19 просмотров
Александр-Можаев Автор вопроса

Есть postmapping метод и 2 формы в jsp. При submit хотя бы одной из форм, выполняются обе. Формы привязаны через modelattribute

Александр Можаев
Есть postmapping метод и 2 формы в jsp. При submit...

По идее тут проблема на стороне этих форм Может быть вы указали для них одинаковые айди?

Александр-Можаев Автор вопроса
Алексей
По идее тут проблема на стороне этих форм Может бы...

Нет. Айди разные. Вот код хтмл: <form:form id="form2" method="post" modelAttribute="salary1" > <form:select path="cityUSA"> <form:option value="0" label="ovwc"/> <form:option value="1" label="ges"/> <form:option value="2" label="eac "/> <form:option value="3" label=" rhc "/> </form:select> <br> <input type="submit" form="form2" value="ok"/> ${c} </form:form> <form:form id="form1" method="post" modelAttribute="salary"> <label for="salary">Введите заработную плату</label> <input name="salary" type="text" id="salary"/> <br> Выберите Ваш регион из списка <form:select path="city"> <form:option value="0" label="Адыгея"/> <form:option value="1" label="Алтай"/> <form:option value="2" label="Алтайский край"/> <form:option value="3" label="Амурская обл."/> </form:select> <br> <input type="submit" form="form1" value="ok"/> ${isLoss} ${salaryOfYear} ${isMore} </form:form> Вот методы контроллера. Логика там другая. Это просто пример сигнатуры @GetMapping("/twoPage") String doGe(Model model){ model.addAttribute("salary",new Salary()); model.addAttribute("salary1",new Salary1()); return "twoPage"; } @PostMapping("/twoPage") String doPos(@ModelAttribute("salary")Salary salary, @ModelAttribute("salary1")Salary1 salary1){ System.out.println("this s1 "+ salary1); System.out.println("this s "+salary); return null; }

То есть, после отправки одной из форм приходит два пост запроса в метод doPos, я правильно понимаю?

Александр-Можаев Автор вопроса
Алексей
То есть, после отправки одной из форм приходит два...

Как бы да. В оригинале кода в одной форме вводится 2 значения, в методе для них логика, потом посредством модельатрибут результат логики выводится в той же форме после нажатия сабмит. То же самое для второй формы. Но при нажатии, допустим сабмит второй формы, выполняется вторая форма и первая (с дефолтными нулевыми значениями. Возможно это из-за того, что логика для обеих форм написано в одном методе с аннотацией постмапинг. Но вторую такую спринг создать не даёт. Пишет что-то вроде: пост метод уже есть

Александр Можаев
Как бы да. В оригинале кода в одной форме вводится...

Можно создать второй метод, если в нем будут другие аргументы Спринг автоматически выберет подходящий метод, и направит туда запрос По поводу проблемы, видимо нашел отгадку. В методе указаны аргументы типов Salary и Salary1, которые, видимо, спринг инициализирует с нулевыми значениями. Поэтому тут не два запроса, просто отсутствующий аргумент заполняется нулевыми значениями Можно обернуть аргументы в Option, и проверять, есть ли нужный аргумент. Или, как я писал выше, создать два метода с разными аргументами

Александр-Можаев Автор вопроса
Алексей
Можно создать второй метод, если в нем будут други...

Сделать 2 метода не получилось. Как я и говорил, не даёт создать, выбрасывает 500 статус. Говорит уже есть пост метод, хоть и аргументы разные. С оберткой не совсем понял, не получается обернуть. В самом параметре метода обернуть? И как проверку сделать. Точнее что должен будет вернуть метод по результатам проверки

Александр Можаев
Сделать 2 метода не получилось. Как я и говорил, н...

Видимо несколько методов можно создавать только с рест контроллерами Нужно обернуть типы аргументов в Optional. Это будет выглядеть как Optional<Salary> Для проверки, есть ли значение в Optional можете использовать метод isPresent(), а для того, чтобы получить само значение- get() Ваш метод-контроллер будет возвращать то же самое, изменится только логика его работы. Например, не будет добавляться один из аттрибутов в model, тут уже на ваше усмотрение.

Александр-Можаев Автор вопроса
Алексей
Видимо несколько методов можно создавать только с ...

В общем я так понял предложение было в том, что бы делать проверку на ноль или пустоту. Понял, сделал. В принципе работает. Но что если я хочу сделать на странице 7 или 10 отдельно работающих форм? Получается для логики каждой формы я должен буду делать проверку в одном методе. И она будет становиться все больше. Я к тому, что это решение проблемы, но оно работает не так как должно быть. То есть формы ведь должны отправлять данные ТЕКУЩЕЙ формы, а не всех. Вот. Есть еще какие-то мысли? Стремлюсь к правильности, а не к "фух, заработало". Хочу потом что-то показать на собесе

Александр Можаев
Сделать 2 метода не получилось. Как я и говорил, н...

Вы наверное их на один и тот же path вешаете, поэтому и не даёт

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта