毕业论文 第5章 系统详细设计与实现
通过上面的配置,当提交发表帖子页面的表单后,会先进行表单验证,验证成功后,则调用mefhod请求参数指定的com.yxq.action.BbsAction类中的方法处理表单。
(5)在BbsAction类中创建处理发表帖子表单的方法。在发表帖子页面的代码中已经指定了处理表单的方法为addBbs(),在该方法中主要实现的是获取表单数据,然后生成向数据表中插入记录的SQL语句,最后执行该SQL语句完成发表帖子操作。addBbs()方法的关键代码如下:
BbsForm bbsForm=(BbsForm)form;
String boardId=(String)session.getAttribute(\
String bbsTitle=Change.HTMLChange(bbsForm.getBbsTitle());
String bbsContent=Change.HTMLChange(bbsForm.getBbsContent());
String bbsSender=((UserForm)session.getAttribute(\String bbsSendTime=Change.dateTimeChange(new Date()); String bbsFace=bbsForm.getBbsFace(); String bbsOpTime=bbsSendTime; String bbsIsTop=\String bbsToTopTime=\
String bbsIsGood=\String bbsToGoodTime=\
String sql=\
Object[]params={boardId,bbsTitle,bbsContent,bbsSender,bbsSendTime,bbsFace,bbsOpTime,bbsIsTop,bbsToTopTime,bbsIsGood,bbsToGoodTime}; ActionMessages messages=new ActionMessages(); OpDB myOp=new OpDB();
int i=myOp.OpUpdate(sql,params);
5.1.7 根贴操作的设计与实现
本论坛系统除了对根贴实现查看详细内容的功能外,还实现了“将帖子提前”、“置顶帖子”、“设为精华帖子”和“删除帖子”4个功能。其中管理员可对根贴进行所有操作,而当前根贴发表者和当前根贴所属版主只可进行“将帖子提前”和“删除帖子”的操作。
因为“将帖子提前”与“删除帖子”功能的实现比较相似,“置顶帖子”与“设为精华帖”的功能实现也是相似的,所以现在主要介绍“将帖子提前”与“置顶帖子”的实现。
1.将帖子提前操作的设计与实现
- 27 -
毕业论文 第5章 系统详细设计与实现
通常情况下,显示版面下根贴的根贴都是按照发表时间降序排列,最新发表的帖子在第一页的最顶部显示,如图5.7所示。
图5.7 最新发表的帖子显示在最顶部
将帖子提前,就是将发表的根贴设置为在版面下第一页中的最顶部位置进行显示。将不是最新发表的帖子提前操作后,就会将该帖子提前到最顶部位置,并不是所有用户可对根贴进行提前的操作,除管理员和当前版面的版主外,只有当前根贴的发表者可进行提前帖子的操作;否则会提示用户无权进行操作。提前贴子如图5.8所示。
图5.8 提前帖子
以下为将帖子提前操作的实现过程
(1)在查看根贴的页面中实现将帖子提前操作的超链接的实现代码如下: ${sessionScope.bbsRootSingle.bbsId}&bbsSender=${sessionScope.bbsRootSingle.bbsSender}\帖子所属者/楼主/管理员操作\将帖子提前
- 28 -
毕业论文 第5章 系统详细设计与实现
(2)在Action处理类中编码实现处理提前帖子的操作。该编码首先需要判断当前操作用户的身份,若当前用户是管理员或当前版面版主或当前帖子的发表者,则实现提前帖子功能,否则生成无权操作提示信息。实现提前帖子功能的关键代码如下:
UserForm logoner=(UserForm)session.getAttribute(\ String bbsId=request.getParameter(\ //获取被提前帖子的ID String bbsSender=request.getParameter(\ //获取被提前帖子的发布者 bbsSender=new String(bbsSender.getBytes(\ String time=Change.dateTimeChange(new Date()); //获取操作时间 String lognerAble=logoner.getUserAble(); //获取当前登录用户的权限 String lognerName=logoner.getUserName(); /获取当前登录用户的用户名
String master=(String)session.getAttribute(\ //获取当前版面的斑竹if(bbsId==null) bbsId=\
if(bbsSender==null) bbsSender=\
String forwardPath=\
ActionMessages messages=new ActionMessages();
/* 如果当前登录的用户是帖子的发表者、帖子所属版面的斑竹、管理员 */ if(lognerAble.equals(\if(bbsId!=null&&!bbsId.equals(\
Object[] params={time,bbsId};
String sql=\OpDB myOp=new OpDB();
int i=myOp.OpUpdate(sql,params); if(i<=0){
System.out.println(\提前帖子失败\forwardPath=\
messages.add(\} else{
System.out.println(\提前帖子成功!\forwardPath=\
messages.add(\} } else{
forwardPath=\}
- 29 -
毕业论文 第5章 系统详细设计与实现
} else{
System.out.println(\您没有权限提前该帖子!\forwardPath=\
messages.add(\}
(3)配置Struts配置文件代码如下:
path=\ type=\ parameter=\
2.置顶帖子操作的设计与实现
置顶帖子就是将根贴与其他根贴单独显示,并且显示在版面下最顶栏,并不是所有用户可以对根贴进行置顶操作,只有管理员才有权限进行此操作;否则会提示用户无权进行操作。置顶帖子的显示位置如图5.9所示。
图5.9 置顶帖子的显示位置
- 30 -
毕业论文 第5章 系统详细设计与实现
以下为置顶帖子操作的实现过程。
(1)在查看根贴的页面中实现置顶帖子操作的超链接,实现代码如下: href=\otSingle.bbsId}\管理员操作\置顶帖子
(2)编写过滤器。当用户触发上面的超链接时,会执行该过滤器,该过滤器用来验证用户身份是否为管理员,首先从session中获取当登录的用户,然后判断其用户身份。实现该过滤器的关键代码如下:
String able=logoner.getUserAble();
if(able.equals(\ chain.doFilter(Srequest, Sresponse); }
else{
request.setAttribute(\您没有权限进行该操作!\RequestDispatcher rd=request.getRequestDispatcher(\rd.forward(Srequest,Sresponse); } }
else{ request.setAttribute(\您没有登录,请先登录!\RequestDispatcher rd=request.getRequestDispatcher(\rd.forward(Srequest,Sresponse);
(3)在Action处理类中编码实现处理置顶帖子的操作。该编码操作首先获取请求中传递的帖子的ID值,然后获取当前时间,最后生成SQL语句,并执行该SQL语句实现置顶帖子操作。实现置顶帖子功能的关键代码如下:
String bbsId=request.getParameter(\if(bbsId!=null&&!bbsId.equals(\Date date=new Date();
String today=Change.dateTimeChange(date);
String sql=\Object[] params={today,bbsId}; OpDB myOp=new OpDB();
int i=myOp.OpUpdate(sql, params); } (4)配置Struts配置文件,代码如下:
- 31 -
相关推荐: