我在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。 提前感谢您的回答。
答案 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>