Как проверить пустое поле в методе действия? - PullRequest
1 голос
/ 18 ноября 2011

У меня есть поле ввода и кнопка. Я хочу проверить, действительно ли textinput, перед выполнением действия кнопки. Если это действительно так, я предоставлю ответное сообщение. У меня есть такой код:

public void submitReportRequest() {
    if(nameField!=null){
        System.out.println("aaaaaaaaaaaaa");
        submitted=true;
    }
    if(nameField == null){
        System.out.println("report name is null!!!!!!");
    }
}

но из консоли я просто получаю:

[#|2011-11-18T15:22:49.931+0200|INFO|glassfishv3.0|null|_ThreadID=21;_ThreadName=Thread-1;|aaaaaaaaaaaaa|#]

когда nameField пусто, я ничего не получаю в консоли, просто страница перерисовывается с сообщением проверки nameField. Из жизненного цикла JSF я знаю, что если этап проверки не пройден, он сразу переходит к фазе ответа рендеринга, и действие кнопки никогда не достигается. Но как мне достичь своей цели в этом случае?

1 Ответ

2 голосов
/ 18 ноября 2011

Пустые отправленные значения по умолчанию равны пустым строкам, а не null. Вместо этого вам нужно проверить, является ли строка пустой: String#isEmpty():

if (nameField.isEmpty()) {
    // Name field is empty.
} else {
    // Name field is not empty.
}

Возможно, вы также хотите закрыть пробелы. В этом случае добавьте trim():

if (nameField.trim().isEmpty()) {
    // Name field is empty or contained spaces only.
} else {
    // Name field is not empty and did not contain spaces only.
}

Обратите внимание, что String#isEmpty() введен в Java 1.6. Если по какой-то причине вы все еще пользуетесь Java 1.5 или старше, вам нужно вместо этого установить String#length().

if (nameField.length() == 0) {
    // Name field is empty.
} else {
    // Name field is not empty.
}

Однако это не обычный способ проверки требуемого поля. Вместо этого вы должны поместить атрибут required="true" в поле ввода.

<h:inputText id="name" value="#{bean.name}" required="true" />
<h:message for="name" />

Таким образом, JSF сам проверит его, отобразит соответствующее сообщение и пропустит вызов метода действия.

Смотри также:

...