如何在action方法中验证空字段?

时间:2011-11-18 13:43:51

标签: jsf-2 javabeans

我有一个输入字段和一个按钮。我想在执行按钮操作之前检查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 个答案:

答案 0 :(得分:2)

空提交的值默认为空字符串,而不是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.
}

请注意,{1.6}中引入了String#isEmpty()。如果由于某种原因你仍然使用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将自行验证它并显示相应的消息,并将跳过操作方法调用。

另见: