土豆爸爸的专栏

朝起早,夜眠迟,老易至,惜此时

教学管理系统-一对多界面处理

模型

学院—1——n—班级—1——n—学生

界面

学院—班级:在视图中用TreeViewer进行组织。当用户双击班级时,打开班级的Editor。CollegeClass中的Students采用延迟加载,否则会加载大量的Student对象。

班级—学生:在以FormEditor进行组织。学生列表以TableViewer显示,单击一条,在DetailView中显示学生信息。在EditorInput初始化时,从后台重新加载CollegeClass对象,并取出Student,EJBQL为

from CollegeClass o left join fetch o.students where o.id = :id
关联更新

1.班级对象级联更新学生对象

添加和删除学生对象直接对CollegeClass#List<Student> students字段直接操作。要产生级联更新(删除)的效果,需要添加Hibernate anntotation:

@OneToMany(mappedBy = "collegeClass", cascade = CascadeType.ALL)
@org.hibernate.annotations.Cascade(org.hibernate.annotations.CascadeType.DELETE_ORPHAN)
public List<Student> getStudents() 
    return students;
}

编辑学生信息直接merge即可。

2.视图与编辑器之间的关联更新

当用户保存编辑器的修改时,如果班级的名称发生变化需要更新视图中的班级名称显示。由于班级对象在EditorInput已重新加载,即编辑器和视图引用的是两个不同对象,所以需要在EditorInput保存视图传递的班级对象source。在保存时,如果班级名称发生变化,更新到source中。在视图打开编辑器之前,需要先注册监听器,这样当source模型被修改时,视图可以得以通知。

上面的模式感觉不是很好,期待高手指点...

当用户从视图的右键菜单删除一个班级时,需要关闭已打开的编辑器。

private void closeCollegeClassEditor(CollegeClass collegeClass) {
   CollegeClassEditorInput input = new CollegeClassEditorInput(collegeClass);
   IEditorPart editor = this.getSite().getPage().findEditor(input);
   if (editor != null) {
    this.getSite().getPage().closeEditor(editor, false);
  }
}

 

 

 

阅读更多
个人分类: 教学管理系统
上一篇教学管理系统-ClassNotFoundException
下一篇教学管理系统-链接文件的发布问题
想对作者说点什么? 我来说一句

教务管理系统界面原型)

2010年11月01日 10.04MB 下载

简单Sql数据库教务管理系统

2014年05月21日 11KB 下载

没有更多推荐了,返回首页

关闭
关闭