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

0

Для отображения формы необходим объект Spitter, свойства которого будут связаны с полями формы. Поскольку форма пред- назначена для регистрации нового пользователя, достаточно будет создать новый, неинициализированный объект Spitter. В листинге

8.8 представлен метод-обработчик createSpitterProfile(), создающий объект Spitter и помещающий его в модель.

Листинг 8.8. Отображение формы регистрации пользователя

@RequestMapping(method=RequestMethod.GET,   params="new") public   String   createSpitterProfile(Model   model)   {

model.addAttribute(new Spitter()); return    "spitters/edit";

}

Подобно другим методам-обработчикам, createSpitterProfile() от- мечен аннотацией @RequestMapping. Но, в отличие от предыдущих ме- тодов-обработчиков, этот не требует определять путь в URL. То есть данный метод обрабатывает запросы для пути в URL, определяемом в аннотации @RequestMapping на уровне класса, в данном случае /spitters.

Единственное, что определяет аннотация @RequestMapping для этого метода, что он будет обрабатывать только запросы типа HTTP GET. Обратите также внимание на атрибут params, которому присваивает- ся значение new. Это означает, что данный метод будет обрабатывать запросы HTTP GET для пути /spitters в URL, только если запрос включает параметр new. Эту разновидность URL, которые будут об- рабатываться методом createSpitterProfile, иллюстрирует рис. 8.6.

Рис. 8.6. Атрибут params аннотации @RequestMapping

может ограничивать область применения метода-обработчика запросами, содержащими определенные параметры

Для внутренних нужд метод createSpitterProfile() создает новый экземпляр Spitter и добавляет его в модель. По завершении он воз- вращает логическое имя представления spitters/edit, реализующего отображение формы.

Теперь создадим само представление.

Определение представления формы

Как и прежде, логическое имя представления, возвращаемое ме- тодом createSpitterProfile(), должно в конечном счете превратиться в определение шаблона Tiles формы для отображения в браузере. Поэтому добавим файл определения шаблона с именем spitters/edit в конфигурационный файл Tiles. Все необходимые определения со- средоточены в следующем элементе <definition>.

<definition name="spitters/edit" extends="template">

<put-attribute  name="content"

value="/WEB-INF/views/spitters/edit.jsp"   />

</definition>

Как и ранее, атрибут content определяет, где находится основной шаблон страницы. В данном случае – в JSP-файле /WEB-INF/views/ spitters/edit.jsp, содержимое которого представлено в листинге 8.9.

Листинг 8.9. Определение шаблона формы для ввода регистрационной информации

<%@     taglib     prefix="sf"     uri="http://www.springframework.org/tags/form"%>

<div>

<h2>Create a free Spitter account</h2>

<sf:form method="POST"  modelAttribute="spitter">     <!–  Связать  форму –>

<fieldset>                                                                        <!–  с  атрибутом  модели  –>

<table  cellspacing="0">

<tr>

<th><label   for="user_full_name">Full   name:</label></th>

<td><sf:input path="fullName" size="15" id="user_full_name"/></td>

</tr>

<tr>

<th><label for="user_screen_name">Username:</label></th>

<td><sf:input  path="username"  size="15"  maxlength="15" id="user_screen_name"/>     <!– Поле имени пользователя –>

<small id="username_msg">No spaces, please.</small>

</td>

</tr>

<tr>

<th><label   for="user_password">Password:</label></th>

<td><sf:password  path="password"  size="30"

showPassword="true"

id="user_password"/>             <!–  Поле  пароля  –>

<small>6  characters  or  more  (be  tricky!)</small>

</td>

</tr>

<tr>

<th><label   for="user_email">Email   Address:</label></th>

<td><sf:input path="email" size="30"

id="user_email"/>                  <!–  Поле  электронной  почты  –>

<small>In  case  you  forget  something</small>

</td>

</tr>

<tr>

<th></th>

<td>

<sf:checkbox path="updateByEmail"

id="user_send_email_newsletter"/> <!– Признак необходимости –>

<label  for="user_send_email_newsletter">  <!–  присылать  уведомления  –> Send  me  email  updates!</label>              <!–  об  изменениях  –>

</td>

</tr>

</table>

</fieldset>

</sf:form>

</div>

Отличает этот JSP-файл от подобных ему, созданных до сих пор, использование библиотеки, входящей в состав Spring и применяемой для связывания форм. Тег <sf:form> связывает объект Spitter (опреде- ляемый атрибутом modelAttribute), который метод createSpitterProfile() поместил в модель, с различными полями формы.

Теги <sf:input>, <sf:password> и <sf:checkbox> имеют атрибут path, ссылающийся на свойство объекта Spitter, связываемое с формой. Когда форма будет отправлена пользователем на сервер, значения полей будут сохранены в соответствующих свойствах объекта Spitter для дальнейшей обработки.

Обратите внимание: в теге <sf:form> определяется, что форма бу- дет отправляться серверу в виде запроса HTTP POST. Но в ней не определяется адрес URL. Так как URL не указан, форма будет отправляться обратно по тому же пути в URL /spitters, который использовался для отображения формы. Это означает, что следую- щим шагом должно быть создание еще одного метода-обработчика, принимающего запросы POST для пути /spitters.

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

По теме:

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