Статьи

Spring MVC: обработка формы, вып.

Выпадающие списки являются одним из наиболее частых элементов в веб-формах. В HTML вы можете создать такой элемент управления, используя соответствующие теги: <form: select> — родительский тег раскрывающегося списка и <form: option> — дочерний тег тега <form: select> . Библиотека тегов Spring MVC имеет собственное решение для выпадающих списков. В этом посте я напишу о тегах <form: select> , <form: option> и <form: options> . весна-MVC-раскрывающийся

В предыдущих статьях об обработке форм с использованием Spring MVC я сделал обзор случаев, когда нам нужно связать текстовое поле, флажки или переключатели с помощью объекта Java. Почти все шаги будут повторяться для элемента выбора выпадающего списка . Далее я рассмотрю три ситуации с выпадающими списками в контексте связывания его с Java-объектом с использованием библиотеки тегов Spring MVC. Первый случай будет о форме: выберите тег со значениями, основанными на java.util.Map , второй пример будет об использовании формы: выберите тег в сочетании с тегами формы: опции , третий пример будет об использовании формы: выберите тег в сочетании с формой: параметры тега.

Каждый пример будет иметь одинаковый результат jsp-страницы, поэтому будут отличаться только страницы формы и контроллеры для них. Настройка конфигурации будет опущена, потому что это было объяснено в одной из предыдущих статей .

Spring MVC выберите тег

Предположим, что пользователь веб-приложения может выбрать производителя мобильного телефона (например, HTC, SAMSUNG, IPHONE и т. Д.). Мы можем реализовать это несколькими способами, используя библиотеку тегов Spring MVC.

Модель предметной области:

01
02
03
04
05
06
07
08
09
10
11
12
13
public class Smartphone {
 
    private String phone;
 
    public String getPhone() {
        return phone;
    }
 
    public void setPhone(String phone) {
        this.phone = phone;
    }
 
}

Этот класс будет привязан к формам.

SmartphoneController:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
    @RequestMapping(value="/phone-page")
    private ModelAndView selectTag() {
        ModelAndView mav = new ModelAndView("phone-form");
 
        Map< String, String > phones = new HashMap();
        phones.put("samsung", "SAMSUNG");
        phones.put("nokia", "NOKIA");
        phones.put("iphone", "IPHONE");
 
        mav.addObject("phonesMap", phones);
        mav.addObject("smartphone", new Smartphone());
 
        return mav;
    }
 
    @RequestMapping(value="/phone-result")
    private ModelAndView processPhone(@ModelAttribute Smartphone smartphone) {
        ModelAndView mav = new ModelAndView("phone-result");
        mav.addObject("smartphone", smartphone);       
        return mav;
    }
...

В методе selectTag () я создаю Карту со значениями, которые будут отображаться на странице с выпадающим списком . Второй метод processPhone (смартфон смартфона @ModelAttribute) будет использоваться в качестве общей конечной точки для всех примеров.

JSP для этого примера:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table>
    <tbody><tr>
    <td>
        <ul>
            <form:select path="phone" items="${phonesMap}">
        </form:select></ul>
    </td>
    </tr>
    <tr>
        <td>
            <input value="Submit" type="submit">
        </td>
    </tr>
</tbody></table
</form:form>

Весна-MVC-выбрать

это оно

Spring MVC опция tag

Во втором примере будет использоваться жестко закодированное значение тега <form: option> .

контроллер:

1
2
3
4
5
6
...
    @RequestMapping(value="/phone-option-page")
    private ModelAndView optionTag() {     
        return new ModelAndView("phone-option-form", "smartphone", new Smartphone());
    }
...

Обратите внимание на JSP:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table>
    <tbody><tr>
    <td>
        <ul>
            <form:select path="phone">
                <form:option value="samsung">SAMSUNG</form:option>
                <form:option value="nokia">NOKIA</form:option>
                <form:option selected="selected" value="htc">HTC</form:option>
                <form:option value="iphone">IPHONE</form:option>
            </form:select>
        </ul>
    </td>
    </tr>
    <tr>
        <td>
            <input value="Submit" type="submit">
        </td>
    </tr>
</tbody></table
</form:form>

Тег настроек Spring MVC

Последний пример демонстрирует, как работает тег <form: options> .

контроллер:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
...
    @RequestMapping(value="/phone-options-page")
    private ModelAndView optionsTag() {
        ModelAndView mav = new ModelAndView("phone-options-form");
 
        Map< String, String > phones = new HashMap();
        phones.put("samsung", "SAMSUNG");
        phones.put("nokia", "NOKIA");
        phones.put("iphone", "IPHONE");
        phones.put("bberry", "BLACKBERRY");
        phones.put("htc", "HTC");
 
        mav.addObject("phonesMap", phones);
        mav.addObject("smartphone", new Smartphone());
 
        return mav;
    }
...

И соответствующий JSP:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
...
<h1>Phone page</h1>
Select phone:
<form:form method="POST" commandname="smartphone" action="phone-result.html">
<table>
    <tbody><tr>
    <td>
        <ul>
            <form:select path="phone">
                <form:option value="-" label="--Select phone">
                <form:options items="${phonesMap}">
            </form:options></form:option></form:select>
        </ul>
    </td>
    </tr>
    <tr>
        <td>
            <input value="Submit" type="submit">
        </td>
    </tr>
</tbody></table
</form:form>
...

Как указано в официальной документации Spring, вы можете использовать любые виды java-объектов с соответствующими методами получения и установки для формы: тег option: атрибут items обычно заполняется коллекцией или массивом объектов item. itemValue и itemLabel просто ссылаются на свойства bean-объектов этих объектов item, если они указаны; в противном случае сами объекты объекта будут зашифрованы. В качестве альтернативы вы можете указать карту элементов, и в этом случае ключи карты интерпретируются как значения параметров, а значения карты соответствуют меткам параметров. Если itemValue и / или itemLabel также указаны, свойство значения элемента будет применяться к ключу карты, а свойство метки элемента будет применяться к значению карты.

Резюме

Каждый из этих примеров удобен в конкретной ситуации и должен использоваться рационально. Тег <form: option> можно использовать в небольших проектах, где вам не нужно большое количество параметров, а <form: options> следует использовать при сохранении значений раскрывающегося списка в базе данных или при необходимо генерировать значения во время выполнения. Исходный код руководства вы можете найти на GitHub .