Java 对象为空,但应用程序的行为与之类似';不是
这是一个简单的SpringMVC应用程序,应该检查数据库中是否有学生。若是这样,应用程序应该加载student.jsp页面,否则应该重定向到addStudent.jsp 我的服务层中有以下内容:Java 对象为空,但应用程序的行为与之类似';不是,java,spring,hibernate,jsp,Java,Spring,Hibernate,Jsp,这是一个简单的SpringMVC应用程序,应该检查数据库中是否有学生。若是这样,应用程序应该加载student.jsp页面,否则应该重定向到addStudent.jsp 我的服务层中有以下内容: Session session = sessionFactory.getCurrentSession(); List studentList = session.createCriteria(Student.class) .add(Restrictions.eq("indexNumber",
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,应用程序的行为也像学生在数据库中一样,并加载student.jsp。谁能解释一下原因吗
indexNumber不是id,只是学生类中的某个唯一字段。您这样做完全忽略了
studentService
返回的值
studentService.search(indexNumber);
您的student
变量绑定到Spring创建的对象,并在调用方法时用作参数。这个对象几乎永远不会是空的。自从
student.equals(null);
如果执行正确,将永远不会返回true
,您的否则将始终执行
我不知道您想对student
Model属性做什么,但是获取服务返回的值并使用它
student = studentService(indexNumber);
if (student == null) {
...
} else {
...
}
在检查null的情况下,也可以尝试==而不是.equals
if (student==null)
return "redirect:/essays/main/student/add";
else
return "student";
如果student
为null
,student.equals(null)
将抛出NullPointerException
。请显示完整的@Controller
处理程序方法。“@SotiriosDelimanolis”这是我的完整的@Controller方法,学生在哪里声明和设置?你不需要像Student=studentService.search(indexNumber)这样的东西吗
请小心使用equals
方法检查对象是否为null
,但请使用操作符=
.Hmm,因为我没有看到student
的声明,我只能假设它是实例成员,这意味着您有一个有状态的控制器。这很糟糕。