今天可能是我来北京后最痛苦的一天了,早上醒的时候已经八点多了,头疼的不行,还附带咳嗽流鼻涕,典型的感冒发烧症状,估计是空调开了一晚上温度调的太低给冻着了,这可怎么好啊,要是放在以前上学的时候肯定不去上课在宿舍歇着了,但是现在不一样了,关键时刻了,课不能不去上的,项目阶段的课程是很连贯的,一天不听第二天就会不知所云,没办法,只能坚持了,把从家里带的药加量吃了一些后又开始了这一天紧张学习生活,一天下来虽然状态不好学习效果差了点,但是至少对今天的内容有了一个总体的认识,今天我们做的是站内消息模块,目的是为了实现不同用户间的信息交流,跟邮箱的功能十分类似,老师带我们实现了基本的功能,只留下了一个页面显示上的分页问题等下次课再解决。
这一个模块包括新建信息,收件箱,发件箱,草稿箱四个部分,归根结底还是对数据库表的CURD操作。
首先建立实体Message,设置相应的属性,比如发送时间,标题,内容,状态等等,另外还要定义是否已从收件箱删除和是否已从发件箱删除两个Boolean类型属性,因为信息存放在一张表中,一条信息可能位于某用户的发件箱同时在另一个用户的收件箱,删除收件箱和发件箱信息的时候不能对表中信息进行删除,要对需要删除的信息增加一个标记,而草稿箱中的信息只被一个用户独有,所以可以直接删除。
建立与用户的映射关系,因为用户可以为收件人也可以为发件人,所以要分别建立信息与收件人以及信息与发件人之间的多对一关联。
收件箱、发件箱和草稿箱内的信息显示比较简单。
收件箱显示的是我接收的消息列表。通过定义查询条件将接收人是目前登陆用户和状态为已发送并且没有被标记从收件箱删除的信息查询出来返回,按照时间降序排列。
return getSession().createQuery(//
"FROM Message m WHERE m.receiver=? AND m.status=? AND m.deleteFromInBox=false ORDER BY m.sendTime DESC")//
.setParameter(0, currentUser)//
.setParameter(1, Message.STATUS_SENDED)// 已发送状态
.list();
发件箱显示的是我已发送的消息列表。通过定义查询条件将发送人是目前登陆用户和状态为已发送并且没有被标记从收件箱删除的信息查询出来返回,按照时间降序排列。
return getSession().createQuery(//
"FROM Message m WHERE m.sender=? AND m.status=? AND m.deleteFromOutBox=false ORDER BY m.sendTime DESC")//
.setParameter(0, currentUser)//
.setParameter(1, Message.STATUS_SENDED)// 已发送状态
.list();
草稿箱显示的是我未发送的消息列表。通过定义查询条件将发送人是目前登陆用户和状态为未发送的信息查询出来返回。
return getSession().createQuery(//
"FROM Message m WHERE m.sender=? AND m.status=?")//
.setParameter(0, currentUser)//
.setParameter(1, Message.STATUS_NOT_SEND)// 未发送状态
.list();
点击菜单"发送消息",进入发送消息的表单页面,应显示空白表单,点击菜单的发送按钮会新生成一条message信息将他的状态设为已发送之后保存到数据库中,点击存为草稿按钮也是新生成一条message信息但是是将他的状态设为未发送之后保存到数据库。
在发件箱中,点击"重新发送",进入发送消息的表单页面,表单中显示指定信息的所有内容。
在收件箱中,点击"回复",进入发送消息的表单页面,表单中显示接收人默认为指定消息的发送者,并且标题默认为:Re: ${标题}。
在草稿箱中,点击"打开",进入发送消息的表单页面。表单中显示指定草稿的所有内容,点击"发送"或"存为草稿"按钮,是保存修改后更新消息。在"发送"与"存为草稿"功能中,应按情况新建或者更新消息,应该使用saveorupdate方法,但在使用方法前需要加入:
if (actionForm.getId() == 0L) {
message.setId(null); // 默认的unsaved-value为null
}
因为当页面中未设置id属性的值时,通过getid方法获取的值通过beanutil转换成了0L,不在是Long类型默认的值null,这是会出现异样。
对于今天这个模块真要我写代码部分我还真是不愁,最头疼的还是让我写页面,在页面上什么东西都得自己一点点写,一不小心范个错误就得调试半天,经常给我搞郁闷。