Рубрики
Без рубрики

Изучение библиотеки тегов формы SpringMVC

Быстрый и по существу учебник о различных тегов, что весна MVC предоставляет, чтобы помочь нам создавать и проверять формы.

Автор оригинала: baeldung.

Изучение библиотеки тегов формы SpringMVC

1. Обзор

В первой статье этой серии мы ввели использование библиотеки тегов формы и способ привязки данных к контроллеру.

В этой статье мы покроем различные теги, которые предоставляет Spring MVC, чтобы помочь нам создание и проверка форм .

2. Тег ввода

Мы наберемся начала с входные ярлык. Этот тег отображает HTML- входные тег с использованием связанного значения и тип ‘текст’ по умолчанию:

Начиная с весны 3.1 вы можете использовать другие типы HTML5, такие как электронная почта, дата и другие. Например, , если бы мы хотели создать учетную запись электронной полевые , мы можем использовать тип ‘электронная почта’:

подобным образом , для создания поле даты, мы можем использовать тип’дата’ , который сделает выбор даты во многих браузерах совместимым с HTML5:

3. Тег пароля

Этот тег отображает HTML- входные тег с тип ‘пароль’ используя связанное значение. Этот ввод HTML маскирует значение, наводимое в поле:

4. Тег textarea

Этот тег отображает HTML- textarea :

Мы можем указать количество ряды и столбцы таким же образом мы хотели бы HTML textarea .

5. Тег флажка и флажков

флажок тег отображает HTML- входные тег с тип’checkbox’ . Библиотека тегов формы Spring MVC предоставляет различные подходы к флажок тег, который должен отвечать всем нашим флажок потребности:

Приведенный выше пример создает классический единый флажок , с булеан ценность. Если мы навеем связанное значение истинное , этот флажок будет проверен по умолчанию.

Следующий пример генерирует несколько флажков . В этом случае флажок значения жестко закодированы на странице JSP:

Bird watching: 
Astronomy: 
Snowboarding: 

Здесь связанное значение имеет тип массив или java.util.Collection :

String[] hobbies;

Цель флажки тег используется для визуализации нескольких флажков, где значения флажка генерируются во время выполнения:

Для генерации значений, которые мы проходим в Массив , Список или Карта содержащие доступные варианты в предметы свойство. Мы можем инициализировать наши значения внутри контроллера:

List favouriteLanguageItem = new ArrayList();
favouriteLanguageItem.add("Java");
favouriteLanguageItem.add("C++");
favouriteLanguageItem.add("Perl");

Обычно связанное свойство представляет собой коллекцию, поэтому оно может удерживать несколько значений, выбранных пользователем:

List favouriteLanguage;

6. Радиобутон и радиобутыси Tag

Этот тег отображает HTML- входные тег с тип’радио’:

Male: 
Female: 

Типичный шаблон использования будет включать несколько экземпляров тегов с различными значениями, связанными с одним и тем же свойством:

private String sex;

Так же, как флажки тег, радиобуттоны тег отображает несколько HTML- входные теги с тип’радио’ :

В этом случае мы можем захотеть передать доступные варианты в качестве Массив , Список или Карта содержащие доступные варианты в предметы свойство:

List jobItem = new ArrayList();
jobItem.add("Full time");
jobItem.add("Part time");

7. Выберите тег

Этот тег отображает HTML- выбрать элемент:

Для генерации значений, которые мы проходим в Массив , Список или Карта содержащие доступные варианты в предметы свойство. Еще раз , мы можем инициализировать наши значения внутри контроллера:

Map countryItems = new LinkedHashMap();
countryItems.put("US", "United States");
countryItems.put("IT", "Italy");
countryItems.put("UK", "United Kingdom");
countryItems.put("FR", "France");

Выбранный тег также поддерживает использование вложенных вариант и варианты Теги.

В то время вариант тег отображает одну HTML- вариант , варианты тег отображает список HTML- вариант Теги.

варианты тег занимает Массив , Список или Карта содержащие доступные варианты в предметы собственности, так же, как выбрать ярлык:


    
    

Когда у нас есть нужно выбрать сразу несколько наименований , мы можем создать несколько список коробка. Чтобы сделать этот тип списка, просто добавьте несколько “истинных” атрибут в выбрать ярлык.

Здесь связанное свойство является массив или java.util.Collection :

List fruit;

8. Скрытый тег

Этот тег отображает HTML- входные тег с тип ‘скрытый’ используя связанное значение:

9. Тег ошибок

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

Это будет отображать ошибки для поля, указанного в путь свойство. Сообщения об ошибках отображаются в течение пролет тег по умолчанию, с .ошибки придат к путь значение в качестве id , и по желанию класс CSS от cssClass свойство, которое может быть использовано для стиля вывода:

Name is required!

Чтобы приложить сообщения об ошибках с другим элементом, а не по умолчанию пролет тег, мы можем указать предпочтительный элемент внутри элемент атрибут:

Это делает сообщения об ошибках в пределах div элемент:

Name is required!

Я n дополнение к возможность показать ошибки для конкретный входной элемент , мы можем отобразить весь список ошибок (независимо от поля) для данной страницы. Это достигается за счет использования подстановочных * :

9.1. Валидатор

Для отображения ошибок для данного поля необходимо определить валидатор:

public class PersonValidator implements Validator {

    @Override
    public boolean supports(Class clazz) {
        return Person.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object obj, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name");
    }
}

В этом случае, если поле имя пуст, валидатор возвращает сообщение об ошибке, идентифицированное required.name из пакета ресурсов.

Пакет ресурсов определяется в весеннем XML файл конфигурации следующим образом:


     

Или в чистом стиле конфигурации Java:

@Bean
public MessageSource messageSource() {
    ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
    messageSource.setBasenames("messages");
    return messageSource;
}

Сообщение об ошибке определяется внутри messages.properts файл:

required.name = Name is required!

Чтобы применить эту проверку, мы должны включить ссылку на валидатор в нашем контроллере и вызвать метод проверить в методе контроллера, который вызывается при отправке формы пользователем:

@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String submit(
  @ModelAttribute("person") Person person, 
  BindingResult result, 
  ModelMap modelMap) {

    validator.validate(person, result);

    if (result.hasErrors()) {
        return "personForm";
    }
    
    modelMap.addAttribute("person", person);
    return "personView";
}

9.2. Проверка фасоли JSR 303

Начиная с весны 3, мы можем использовать JSR 303 (через аннотацию @Valid ) для проверки фасоли. Для этого нам нужна Рамки валидатора JSR303 на классной симпатии. Мы будем использовать Спящий валидатор (реализация ссылки). Ниже приводится зависимость, которую мы должны включить в POM:


    org.hibernate
    hibernate-validator
    5.1.1.Final

Чтобы сделать Spring MVC поддержку JSR 303 проверки через @Valid аннотация, мы должны включить следующее в нашем файле конфигурации Весна:

Или используйте соответствующую аннотацию @EnableWebMvc в конфигурации Java:

@EnableWebMvc
@Configuration
public class ClientWebConfigJava implements WebMvcConfigurer {
    // All web configuration will go here
}

Далее нам нужно аннотировать метод контроллера что мы хотим проверить с @Valid аннотация:

@RequestMapping(value = "/addPerson", method = RequestMethod.POST)
public String submit(
  @Valid @ModelAttribute("person") Person person, 
  BindingResult result, 
  ModelMap modelMap) {
 
    if(result.hasErrors()) {
        return "personForm";
    }
     
    modelMap.addAttribute("person", person);
    return "personView";
}

Теперь мы можем аннотировать свойство сущности, чтобы проверить его с аннотацией Валидатора Hibernate:

@NotEmpty
private String password;

По умолчанию эта аннотация будет отображаться “Не может быть пустым” если мы оставим поле ввода пароля пустым.

Мы можем переопределить сообщение об ошибке по умолчанию, создав свойство в пакете ресурсов, определяемом в примере валидатора. Ключ сообщения следует правилу АннотацияИмя.entity.fieldname :

NotEmpty.person.password = Password is required!

10. Заключение

В этом учебнике мы изучили различные теги, которые Весна предусматривает для работы с формами.

Мы также имели взгляд на бирку для отображения ошибки проверки и конфигурации, необходимой для отображения пользовательских сообщений об ошибках.

Все приведенные выше примеры можно найти в Проект GitHub . Это проект на основе Eclipse, поэтому его легко импортировать и запускать в том же объеме.

Когда проект выполняется локально, к примеру формы можно получить доступ по:

http://localhost:8080/spring-mvc-xml/person