我有一个输入字段和一个按钮。我想在执行按钮操作之前检查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生命周期知道,如果验证阶段失败,那么它会直接跳转到渲染响应阶段,并且永远不会达到按钮操作。但是我怎样才能在这种情况下实现我的目标呢?
答案 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将自行验证它并显示相应的消息,并将跳过操作方法调用。