Spring MVC控制器将null数据返回给视图

时间:2015-04-22 15:51:03

标签: java spring jsp spring-mvc

我有一个返回用户列表的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.");
       }
} 

3 个答案:

答案 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();
                        }
                    }