object为null,但app表现得并非如此

时间:2013-12-17 01:26:40

标签: java spring hibernate jsp

这是一个简单的Spring MVC应用程序,应该检查学生是否在数据库中。如果是这样,app应该加载student.jsp页面,否则它应该重定向到addStudent.jsp。

我在服务层中有这个:

Session session = sessionFactory.getCurrentSession();

List studentList = session.createCriteria(Student.class)
    .add(Restrictions.eq("indexNumber", indexNum))
    .list();

if(studentList.isEmpty())
    return null;
else {
    Student student = (Student)studentList.get(0);
    return student;

这是我的控制者:

    @RequestMapping(value="/search", method = RequestMethod.POST)
    public String postSearchStudent(@RequestParam(value = "indexNumber") String indexNumber,
                        @ModelAttribute("studentSearchAttribute") Student student) {

        logger.debug("Received request to search for a student");

        studentService.search(indexNumber);

        if (student.equals(null))
            return "redirect:/essays/main/student/add";
        else
            return "student";
    }

但它无法正常工作 - 即使服务返回null,app的行为就像学生在数据库中并加载student.jsp一样。有人可以解释一下原因吗?

indexNumber不是id,只是Student类中的一些唯一字段。

2 个答案:

答案 0 :(得分:1)

您完全忽略了studentService通过

返回的值
studentService.search(indexNumber);

您的student变量绑定到Spring创建的对象,并在调用方法时用作参数。那个对象几乎永远不会是null。从那以后

student.equals(null);
如果正确实施,

将永远不会返回true,您的else将始终执行。

我不知道您想对student模型属性做什么,但获取服务返回的值并使用它

student = studentService(indexNumber);
if (student == null) {
   ...
} else {
    ...
}

答案 1 :(得分:0)

如果 null 检查

,请尝试 == 而不是 .equals
if (student==null)
    return "redirect:/essays/main/student/add";
else
    return "student";