在JSP中填充下拉列表以及相关表名

时间:2013-09-24 17:20:51

标签: java hibernate jsp

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

DEPARTMENT(有字段:DEPARTMENT_ID和DEPARTMENT_NAME),我通过DEPARTMENT_INSTITUTE(有一个DEPARTMENT_ID和INSTITUTE_ID)与INSTITUTE(有INSTITUTE_ID和INSTITUTE_NAME)连接,后来通过INSTITUTE_TEACHER(再次通过Id)与TEACHER(TEACHER_ID,NAME, SURNAME,TITLE)。

这一切都有一对多的关系,所以一个部门可以有很多学院,一个学院可以有很多教师。

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

  • 如何查询所有这些数据并将它们放入一个列表中,
  • 在JSP中使用JSTL将它们放在下拉菜单中。

    有谁能告诉我怎么能这样做?我很想明白这一点。这是查询“一切”的方法的骨架:

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

    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;
    }

我已经使用这个特定的教程完成了数据模型:http://www.dzone.com/tutorials/java/hibernate/hibernate-example/hibernate-mapping-one-to-many-1.html所以基本上在部门类中有一个带有机构的HashSet,而在Institutes中有一个带有教师的hashset。 提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

  

我想将它全部放入一个对象并通过JSTL   把它放在一个下拉菜单中(下拉列表不需要有一个   几个层次,它可以在同一水平上。)

使用toView地图而不是列表,将所有键值对保存到下拉菜单中。

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());

将此map添加到request

Map<String, String> toView = YourDataProvider.enlistEverything();
request.setAttribute("toView", toView);

现在在JSP中,使用它将值放在下拉菜单中:

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