Java Platform, Enterprise Edition (Java EE) 8
Учебник по Java EE

Назад Вперёд Содержание

Приложение address-book

Приложение address-book — это простое веб-приложение, в котором хранятся контактные данные. Он использует один класс сущности Contact, который использует Java API валидации бинов (Bean Validation) для проверки данных, хранящихся в персистентных атрибутах объекта, как описано в Валидация персистентных полей и свойств.

Здесь рассматриваются следующие темы:

Ограничения валидации бинов в address-book

Сущность Contact использует ограничения @NotNull, @Pattern и @Past для персистентных атрибутов.

Ограничение @NotNull помечает атрибут как обязательное поле. Атрибут должен быть установлен в значение не-null, прежде чем объект будет сохранён или изменён. Bean Validation выдаст ошибку валидации, если атрибут будет null при сохранении или изменении.

Ограничение @Pattern определяет регулярное выражение, которому должно соответствовать значение атрибута, прежде чем объект сущности будет сохранён или изменён. Это ограничение имеет два различных использования в address-book.

  • Регулярное выражение, объявленное в аннотации @Pattern в поле email, соответствует адресам электронной почты имени формы @domain name.top level domain, допускающий только валидные символы для адресов электронной почты. Например, username@example.com пройдет валидацию, как и firstname.lastname@mail.example.com. Однако firstname,lastname@example.com, который содержит недопустимый символ запятой в локальном имени, не пройдёт валидацию.

  • Поля mobilePhone и homePhone аннотированы ограничением @Pattern, которое определяет регулярное выражение для сопоставления телефонных номеров в форме (xxx) xxx-xxxx.

Ограничение @Past применяется к полю дня рождения, которое должно быть java.util.Date в прошлом .

Вот соответствующие части класса сущности Contact:

@Entity
public class Contact implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @NotNull
    protected String firstName;
    @NotNull
    protected String lastName;
    @Pattern(regexp = "[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\."
            + "[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"
            + "(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9]"
            + "(?:[a-z0-9-]*[a-z0-9])?",
            message = "{invalid.email}")
    protected String email;
    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
            message = "{invalid.phonenumber}")
    protected String mobilePhone;
    @Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
            message = "{invalid.phonenumber}")
    protected String homePhone;
    @Temporal(javax.persistence.TemporalType.DATE)
    @Past
    protected Date birthday;
    ...
}

Указание сообщений об ошибках для ограничений в address-book

Некоторые из ограничений в сущности Contact указывают необязательное сообщение:

@Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
        message = "{invalid.phonenumber}")
protected String homePhone;

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

@Pattern(regexp = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$",
        message = "Invalid phone number!")
protected String homePhone;

Однако ограничения в Contact являются строками в bundle-ресурсе ValidationMessages.properties в каталоге tut-install/examples/persistence/address-book/src/java/. Это позволяет размещать сообщения валидации в одном файле свойств и легко локализовывать сообщения. Переопределённые сообщения валидации бинов должны быть помещены в файл свойств bundle-ресурса с именем ValidationMessages.properties в пакете по умолчанию, причём локализованные bundle-ресурсы принимают форму ValidationMessages_`locale-prefix`.properties. Например, ValidationMessages_es.properties — это bundle-ресурс, используемый в испаноязычных локалях.

Валидация корректности ввода контактов из приложения JavaServer Faces

Приложение address-book использует веб-интерфейс JavaServer Faces, чтобы позволить пользователям вводить контактные данные. Хотя JavaServer Faces имеет механизм валидации данных формы ввода с использованием тегов в файлах Facelets XHTML, address-book не использует эти теги валидации. Ограничения валидации бинов в Managed-бинах JavaServer Faces, в данном случае в сущности Contact, автоматически запускают валидацию при отправке форм.

В следующем фрагменте кода из файла Create.xhtml Facelets показаны некоторые формы ввода для создания новых объектов Contact:

<h:form>
    <table columns="3" role="presentation">
        <tr>
            <td><h:outputLabel value="#{bundle.CreateContactLabel_firstName}"
                               for="firstName" /></td>
            <td><h:inputText id="firstName"
                             value="#{contactController.selected.firstName}"
                             title="#{bundle.CreateContactTitle_firstName}"/>
            </td>
            <td><h:message for="firstName" /></td>
        </tr>
        <tr>
            <td><h:outputLabel value="#{bundle.CreateContactLabel_lastName}"
                               for="lastName" /></td>
            <td><h:inputText id="lastName"
                             value="#{contactController.selected.lastName}"
                             title="#{bundle.CreateContactTitle_lastName}" />
            </td>
            <td><h:message for="lastName" /></td>
        </tr>
        ...
    </table>
</h:form>

Теги <h:inputText> firstName и lastName связаны с атрибутами в объекте selected сущности Contact в сессионном компоненте без сохранения состояния ContactController. Каждый тег <h:inputText> имеет связанный тег <h:message>, который будет отображать сообщения об ошибках валидации. Однако форма не требует каких-либо тегов валидации JavaServer Faces.

Запуск address-book

Вы можете использовать IDE NetBeans или Maven для сборки, упаковки, развёртывания и запуска приложения address-book.

Здесь рассматриваются следующие темы:

Запуск address-book с IDE NetBeans

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. Если сервер базы данных ещё не запущен, запустите его, следуя инструкциям в Запуск и остановка Apache Derby.

  3. В меню «Файл» выберите «Открыть проект».

  4. В диалоговом окне «Открыть проект» перейдите к:

    tut-install/examples/persistence
  5. Выберите каталог address-book.

  6. Нажмите Открыть проект.

  7. На вкладке «Проекты» кликните правой кнопкой мыши проект address-book и выберите «Выполнить».

    После развёртывания приложения появится окно веб-браузера по следующему URL:

    http://localhost:8080/address-book/
  8. Нажмите Показать все элементы контакта, затем Создать новый контакт. Введите значения в поля. Затем нажмите Сохранить.

    Если любое из введённых значений нарушает ограничения в Contact, рядом с полем рядом с полем появится сообщение об ошибке с неверными значениями.

Запуск address-book с использованием Maven

  1. Удостоверьтесь, чтобы GlassFish Server был запущен (см. Запуск и остановка сервера GlassFish).

  2. Если сервер базы данных ещё не запущен, запустите его, следуя инструкциям в Запуск и остановка Apache Derby.

  3. В окне терминала перейдите в:

    tut-install/examples/persistence/address-book/
  4. Введите следующую команду:

    mvn install

    Эта команда компилирует и упаковывает приложение address-book в WAR. WAR-файл затем развёртывается на сервере GlassFish.

  5. Откройте окно веб-браузера и введите следующий URL:

    http://localhost:8080/address-book/
  6. Нажмите Показать все элементы контакта, затем Создать новый контакт. Введите значения в поля. Затем нажмите Сохранить.

    Если любое из введённых значений нарушает ограничения в Contact, рядом с полем рядом с полем появится сообщение об ошибке с неверными значениями.


Назад Вперёд Содержание
Логотип Oracle  Copyright © 2017, Oracle и/или её дочерних компаний. Все права защищены. Версия перевода 1.0.5 (Java EE Tutorial — русскоязычная версия)