我有一个返回用户列表的Controller。当用户存在时,程序运行正常。但是,当找不到用户时,控制器会向jsp页面返回null,在这种情况下,我得到一个空白屏幕,没有一个" alert"在jsp页面中打印出来。请告诉我为什么警报("用户不存在")无法打印,以及当控制器将空值返回到jsp页面时如何处理这种情况。
@RequestMapping(value = "/userSearch",
method = RequestMethod.POST,
produces = "application/json")
@ResponseBody
public UserList search @RequestParam String username)
{
UserList userListObj = search(username); // search database
if (userListObj.getUserList().size() > 0)
{
return userListObj;
}
else
{
return null;
}
}
JSP代码:
function ajaxUserSearch()
{
var uname = $("#userName").val();
if ( uname )
{
$.ajax({
type: "POST",
url: "userSearch.htm",
data: "username=" + uname ,
dataType: "json",
success: function(data)
{
alert("data=" + data);
if ( data!=null )
{
alert("data not null");
}
else
{
alert(" user does not exist, please check");
}
},
error: function(jqXHR, status, error)
{
alert("error=" + error + "\nstatus=" + status);
}
});
}
else // If no name is entered but Search button is pressed
{
alert("Please enter a user name.");
}
}
答案 0 :(得分:1)
不要返回null。它基本上是一个空的http响应。
在Java代码中,尝试返回类似:return "notfound"
然后在Javacript success
尝试做类似的事情:
if (data != null) {
if (data === "notfound") {
alert("user not found");
} else {
alert("user found" + data);
}
} else {
alert("unexpected error when finding user. please try again");
}
答案 1 :(得分:0)
甚至不需要检查控制器中userListObj
的大小......只需将对象返回到页面:
@ResponseBody
public UserList search @RequestParam String username) {
return search(username); // search database
}
然后在你的ajax成功函数中,解析json并检查UserList
的长度:
success: function(data) {
var userListObj = $.parseJSON(data);
if(userListObj.UserList.length > 0) {
alert("data not null");
} else {
alert("user does not exist, please check");
}
答案 2 :(得分:-1)
我通过在客户端输入字段上禁用回车键来解决我自己的问题。
ProgressBar progressBar = splash.Controls["myProgressBar"];
foreach (string line in lines)
{
foreach (ComboBox comboBox in controls.OfType<ComboBox>())
{
if (line.StartsWith("ComboBox"))
{
comboBoxesNames = line.Substring(14);
}
else
{
if (line.StartsWith("Classes"))
{
if (comboBox.Name == comboBoxesNames)
{
comboBox.Items.Add(line.Substring(14));
}
}
}
progressBar.PerformStep();
}
}