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

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

Валидация строк на null и пустоту

Язык программирования Java различает null и пустые строки. Пустая строка — это строковый объект нулевой длины, тогда как строка null вообще не имеет значения.

Пустая строка представляется как "". Это последовательность из нулевых символов. Строка null представлена ​​как null. Это можно описать как отсутствие объекта строки.

Элементы Managed-бина, представленные в виде текстового компонента JavaServer Faces, такого как inputText, инициализируются JavaServer Faces значением пустой строки. Проверка этих строк может быть проблемой, когда пользовательский ввод для таких полей не требуется. Рассмотрим следующий пример, где строка testString является переменной компонента, которая будет установлена ​​с использованием пользовательского ввода. В этом случае пользовательский ввод для поля не требуется.

if (testString==null) {
    doSomething();
} else {
    doAnotherThing();
}

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

Чтобы модель проверки компонентов работала должным образом, необходимо установить для контекстного параметра javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL значение true в файле дескриптора развёртывания web.xml:

<context-param>
    <param-name>
        javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL
    </param-name>
    <param-value>true</param-value>
</context-param>

Этот параметр указывает JavaServer Faces обрабатывать пустые строки как null.

Предположим, с другой стороны, что у вас есть ограничение @NotNull для элемента, что означает, что требуется ввод. В этом случае пустая строка пройдет это ограничение проверки. Однако если вы установите для контекстного параметра javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL значение true, значение атрибута Managed-бина передаётся среде выполнения Bean Validation в качестве нулевого значения, что приводит к появлению значения null. Ограничение @NotNull не выполнено.


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