这是一个简单的 Spring MVC 应用程序,应检查学生是否在数据库中。如果是这样,应用程序应该加载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;
这是我的 Controller :
@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,只是 Student 类中的一些唯一字段。
最佳答案
您完全忽略了 studentService
返回的值
studentService.search(indexNumber);
您的 student
变量绑定(bind)到 Spring 创建的对象,并在调用您的方法时将其用作参数。该对象几乎永远不会为 null
。自从
student.equals(null);
如果正确实现,永远不会返回true
,您的else
始终会被执行。
我不知道您想对 student
模型属性做什么,但获取您的服务返回的值并使用它
student = studentService(indexNumber);
if (student == null) {
...
} else {
...
}
关于java - 对象为空,但应用程序的行为就像不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20624295/