Главная » Spring » Отображение скрытого поля с именем метода Spring

0

В разделе 8.4.1 было показано, как использовать библиотеку свя- зывания полей формы, входящую в состав Spring, для отображения HTML-форм. Основным элементом этой библиотеки является тег

<sf:form>. Этот тег определяет содержимое для других тегов, связы- вающих поля формы с атрибутами модели.

Мы уже использовали тег <sf:form> для определения формы соз- дания нового объекта Spitter. Для этого запрос POST подходит как нельзя лучше, потому что этот тип запросов часто используется для создания новых ресурсов. Но как быть, если потребуется изменить или удалить ресурс? Для таких ситуаций лучше подходят запросы PUT и DELETE соответственно.

Однако, как уже отмечалось выше, HTML-тег <form> не всегда может посылать иные запросы, кроме GET и POST. Некоторые новей- шие браузеры не испытывают проблем, если в атрибуте method  тега

<form> указать метод PUT или DELETE, но более старые браузеры могут скрытно посылать формы серверу методом POST.

Чтобы обеспечить подмену типа POST запроса на PUT или DELETE, необходимо создать HTML-форму, отправляемую серверу в виде POST-запроса, и добавить в нее скрытое поле. Например, следующий фрагмент разметки HTML демонстрирует, как создать форму, кото- рая отправляется в виде запроса DELETE:

<form   method="post">

<input  type="hidden"  name="_method"  value="delete"/>

</form>

Как видите, совсем несложно создать форму со скрытым полем, определяющим настоящий метод HTTP. Для этого достаточно до- бавить скрытое поле с именем, которое будет опознано сервером, и указать в этом поле имя желаемого метода HTTP. Эта форма будет отправлена на сервер в виде POST-запроса. А сервер, по всей види- мости, будет интерпретировать поле _method  как фактический тип запроса (чуть ниже будет показано, как настроить сервер, чтобы обеспечить эту интерпретацию).

С помощью тега <sf:form> из библиотеки связывания форм, вхо- дящей в состав фреймворка Spring, сделать это еще проще. Нужно лишь указать в его атрибуте method желаемый метод HTTP, и тег

<sf:form> сам позаботится о создании скрытого поля:

<sf:form method="delete" modelAttribute="spitter">

</sf:form>

При отображении тега <sf:form> в разметку HTML результат будет очень похож на HTML-тег <form>, показанный выше. Тег <sf:form> освобождает от необходимости вручную определять скрытое поле, позволяя определять формы, отправляемые в виде запросов PUT и DELETE, более естественным способом, как если бы они поддержива- лись браузерами.

Но тег <sf:form> – это лишь часть механизма подмены типов за- просов, действующая на стороне браузера. А как сервер узнает, что POST-запрос должен обрабатываться как запрос PUT или DELETE?

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии