java - 对象为空,但应用程序的行为就像不是

标签 java spring hibernate jsp

这是一个简单的 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/

相关文章:

java - 在性能方面,double 数组比 java 中的自定义类更好还是更差?

java - 如何自定义soapUI库以从WSDL生成请求和响应?

java - 重复的 Spring Batch 作业实例

java - DI 将 String bean 作为 List<String> 的单个元素注入(inject),而不是正确的 List<String> bean

java - 如何获取@OneToMany 和@ManyToMany 实体

hibernate - Grails 域类查询 - 如何通过链接到另一个域类的字段进行查找?

java - 如何在 android/java 中使用矩阵移动和旋转 Canvas 中的位图?

java - 是否可以在 Java 中将 Map 的键定义为 List?

Java Spring Freemarker 模板国际化

java - 具有唯一约束的 Hibernate 更新表