Java 用JSP中的相关表名填充下拉列表

Java 用JSP中的相关表名填充下拉列表,java,hibernate,jsp,Java,Hibernate,Jsp,我在hibernate4中创建了以下数据库结构: 部门(有字段:部门ID和部门名称),我通过部门学院(有部门ID和学院ID)与学院(有学院ID和学院名称)连接,而后通过学院教师(再次通过ID)与教师(教师ID、姓名、姓氏、职称)连接 这一切都有一对多的关系,因此一个系可以有多个学院,一个学院可以有多个教师 我想基本上把它全部放在一个对象中,并通过JSTL把它放在一个下拉菜单中(下拉列表不需要有几个级别,它可以在同一级别上)。问题是,我不知道: 如何查询所有这些数据并将其放入一个列表 在JSP

我在hibernate4中创建了以下数据库结构:

部门(有字段:部门ID和部门名称),我通过部门学院(有部门ID和学院ID)与学院(有学院ID和学院名称)连接,而后通过学院教师(再次通过ID)与教师(教师ID、姓名、姓氏、职称)连接

这一切都有一对多的关系,因此一个系可以有多个学院,一个学院可以有多个教师

我想基本上把它全部放在一个对象中,并通过JSTL把它放在一个下拉菜单中(下拉列表不需要有几个级别,它可以在同一级别上)。问题是,我不知道:

  • 如何查询所有这些数据并将其放入一个列表

  • 在JSP中使用JSTL将它们放在下拉菜单中

    Map<String,String> toView = new LinkedHashMap<String,String>();
    ..
    ..
    toView.put(d.getDepartmentId()+"dept",d.getDepartmentName());
    toView.put(i.getInstituteId()+"inst",i.getInstituteName());
    toView.put(t.getTeacherId()+"teach",t.getTeacherTitle() + t.getTeacherName() + t.getTeacherSurname());
    
    有人能告诉我怎么做吗?我很想了解这一点。下面是查询“所有内容”的方法的框架:

[编辑]所以我在这里做了一个从数据库查询的方法,如果有人能看看这是不是一个好的解决方案,我将不胜感激

    public List<String> enlistEverything(){
    Session session = sessionFactory.openSession();
    Transaction tx = null;
    List<String> toView = new ArrayList<String>();
    try{
        tx = session.beginTransaction();
        HashSet<Department> departments = (HashSet<Department>)session.createQuery("FROM Department").list();
        HashSet<Institute> institutes = new HashSet<Institute>();
        HashSet<Teacher> teachers = new HashSet<Teacher>();
        
        for(Department d : departments){
            toView.add(d.getDepartmentName());
            institutes.addAll(d.getInstitutes());

        }
        for(Institute i : institutes){
            toView.add(i.getInstituteName());
            teachers.addAll(i.getTeachers());
    }
    for(Teacher t : teachers){
            toView.add(t.getTeacherTitle() + t.getTeacherName() + t.getTeacherSurname());
        }
    }catch(HibernateException e){
        if (tx!=null) tx.rollback();
        e.printStackTrace();
    } finally {
        session.close();
    }
    return toView;
    }
公共列表登记所有内容(){
Session Session=sessionFactory.openSession();
事务tx=null;
List toView=new ArrayList();
试一试{
tx=session.beginTransaction();
HashSet departments=(HashSet)session.createQuery(“来自部门”).list();
HashSet=newhashset();
HashSet教师=新HashSet();
部门(d部门:部门){
添加(d.getDepartmentName());
addAll(d.getInstitutes());
}
(研究所一:研究所){
添加(i.getInstituteName());
addAll(i.getTeachers());
}
教师(t:教师){
添加(t.getTeacherTitle()+t.getTeacherName()+t.getteacherurname());
}
}捕获(休眠异常e){
如果(tx!=null)tx.rollback();
e、 printStackTrace();
}最后{
session.close();
}
返回视图;
}
我已经使用这个特别的教程完成了数据模型:所以基本上在系课里面有一个包含学院的哈希集,在学院里有一个包含教师的哈希集。 提前感谢您的回答

我想基本上把它全部放到一个对象中,并通过JSTL 将其放入一个下拉菜单(下拉列表不需要有 只有几个级别,可以在同一级别上)

使用
查看
映射,而不是列表,以将所有键值对保留在下拉菜单中

Map<String,String> toView = new LinkedHashMap<String,String>();
..
..
toView.put(d.getDepartmentId()+"dept",d.getDepartmentName());
toView.put(i.getInstituteId()+"inst",i.getInstituteName());
toView.put(t.getTeacherId()+"teach",t.getTeacherTitle() + t.getTeacherName() + t.getTeacherSurname());
现在在JSP中,使用以下命令将值放入下拉菜单:

<select name="mapData">
    <c:forEach items="${toView}" var="data">
        <option value="${data.key}">${data.value}</option>
    </c:forEach>
</select>

${data.value}

您是否在使用普通jsp/servlet或任何框架进行开发?这是一个普通的框架,我刚刚开始学习。