ПРЕДУПРЕЖДЕНИЕ: метод запроса «GET» не поддерживается

Вопрос:В моем приложении Spring я делаю вот так.. Будет отправлена ​​форма клика гиперссылки формы Jsp. Save В моем классе контроллера я написал метод. @RequestMapping(value = "href_form1", method = RequestMethod.POST) public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception { //Database code

Вопрос:

В моем приложении Spring я делаю вот так..

Будет отправлена ​​форма клика гиперссылки формы Jsp.

<form:form action=»user» modelAttribute=»NAME»> <a href=»href_form1″ onclick=»onClick_Save()» class=»save»>Save</a> </fomr:form> <script> function onClick_Save() { $(«#NAME»).attr(«action», $(‘.save’).attr(«href»)); $(«#NAME»).submit(); }); </script>

В моем классе контроллера я написал метод.

@RequestMapping(value = «href_form1», method = RequestMethod.POST) public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception { //Database code here. model.addAttribute(«NAME», userForm); return «User Updated»; }

EDIT1:

WARNING: Request method ‘GET’ not supported

и я получаю страницу с ошибкой.

HTTP Status 405 — Request method ‘GET’ not supported

ИЗМЕНИТЬ: после изменения кода, как показано ниже

<script> $(function() { $(‘.save’).on(«click»,function(e) { e.preventDefault(); $(«#NAME»).attr(«action», $(this).attr(«href»)).attr(«method»,»POST»); $(«#NAME»).submit(); }); }); </script>

Но моя форма не дойдет до моего метода контроллера.

Что-то не так в моем коде? Я также пробовал method=»POST» в теге формы.

Лучший ответ:

Вот причина, по которой вы получаете ошибку

Ссылка href вызывает контроллер при нажатии, потому что вы не отменяете действие по умолчанию ссылки

Таким образом, код выполняет следующие

  • пытается установить действие формы в href ссылки
  • пытается отправить указанную форму с помощью POST – это то, что я понимаю, чего вы хотите достичь.
  • независимо от того, удастся ли это сделать, браузер сразу же следует за href ссылки, которая попытается вызвать контроллер с GET, поскольку ссылка будет делать, если onclick не прекратит это действие. Даже если код преуспел в POSTing форме, этот запрос будет убит новым запросом, который заканчивает выполнение GET

По-моему, у вас есть следующие возможности: некоторые из них, по-видимому, лучше других, чем другие.

Не-javascript

  • Имейте параметр, который содержит идентификацию того, что вы хотите сохранить, и форму для каждого параметра
  • измените свой метод spring на
    method = { RequestMethod.GET, RequestMethod.POST} или
    method = RequestMethod.GET – GET позволит вам избавиться от формы и просто иметь следующую ссылку (после обновления кода spring, конечно)

<a href=»href_link?user=user1″>Save User1</a>

если вы пожелаете

Поддержка JavaScript

Имейте параметр в форме, которая содержит идентификацию того, что вы хотите сохранить, установите ЭТО с помощью JavaScript и выполните ОБЯЗАТЕЛЬНО return false или preventDefault, чтобы отменить ссылку:

<!— this is an example of the rendered form —> <form action=»href_form1″ id=»NAME» method=»POST»> <input type=»hidden» name=»saveItem» id=»saveItem» value=»» /> </form> <a href=»#» class=»saveLink» data-save=»save item 1″>Save item 1</a> <a href=»#» class=»saveLink» data-save=»save item 2″>Save item 2</a> <a href=»#» class=»saveLink» data-save=»save item 3″>Save item 3</a>

Обратите внимание: у меня нет ссылки в href, чтобы не запрашивать что-то

jQuery для этого процесса:

$(function() { // assuming form ID=»NAME» $(«.saveLink»).on(«click»,function(e) { e.preventDefault(); // do not follow link $(«#saveItem»).val($(this).data(«save»)); // set the hidden field $(«#NAME»).submit(); }); });

Вот вам более интересный способ, предполагая, что ваши контроллеры spring подключены для обработки ваших запросов:

DEMO

$(function() { $(‘.save’).on(«click»,function(e) { // passing event e.preventDefault(); // jQuery will normalise it for all modern browsers // post the href of the link to the server and return the result in a // container with ID result $.post($(this).attr(«href»), function(data) { // or $.get if you want $(‘#result’).html(data); }); }); Ответ №1

Вам нужно указать method в теге form. И да, ваша гиперссылка игнорирует форму. Поэтому установите атрибут action в форме на href_form1 и измените свою гиперссылку на ввод или (и я бы не рекомендовал этого), чтобы изменить вашу гиперссылку, чтобы сделать представление JavaScript. На данный момент у вас есть настройка onclick и href. Ниже приведена наилучшая практика.

<form:form action=»href_form1″ modelAttribute=»NAME» method=»POST»> <input type=»submit» value=»Save» />

Также ваш селектор jQuery $(«#NAME») не находит ничего, потому что вы не установили атрибут id в форме, которую хотите получить.

Ответ №2

Попробуйте что-то вроде этого

<form:form action=»href_form1″ modelAttribute=»NAME» method=»POST»> <input type=»submit»/> </form:form> @RequestMapping(value = «href_form1», method = RequestMethod.POST) public @ResponseBody String href_form1(UserForm userForm,Model model)throws Exception { //Database code here. model.addAttribute(«NAME», userForm); return «User Updated»; }

В принципе очень простая форма submit. Как только вы начнете работать, вы знаете, что ваша форма и контроллер настроены правильно. После этого, если вы хотите использовать тег привязки для отправки формы, вернитесь к более ранним предложениям, preventDefault и затем отправьте форму.

Надеюсь, что это поможет.

Ответ №3

Метод http по умолчанию для отправки формы – GET. Поскольку вы хотите POST, пожалуйста, укажите это, и он будет работать liek method=»POST»

Также я не вижу корректного отображения URL-кода в коде. Не могли бы вы подтвердить его правильность.

Оцените статью
Добавить комментарий