本人毕设,一个社区网站,做到论坛这个模块的时候,想做的智能化一些,刚好在用百度贴吧,就想着参考百度贴吧做一个智能论坛回复模块。参考很多网上的开源论坛源码,针对于回复功能,基本上没有动态提示以及分类的,全是死板的一条一条的堆积在界面里,没有分类,没有筛选。不知道谁在对谁评论,谁在对谁回复,这样就是一条条记录的增删改查,毫无功能性而言,用户体验性极差。刚开始的时候,我也是这样想,随便做一个增删改查就行了,不需要讲究太多,但是后来做着做着连我自己都感觉恶心,既然做了,为什么不能做的好一点,为什么不能智能化一点呢,所以,我开始抽出时间认真琢磨百度贴吧的嵌套回复功能。慢慢的发现,好像大多数主流论坛系统都是采用这种方式。这更加坚定了我要搞出这样回复模式的念头。

public String details()throws Exception{
topic=topicService.findTopicById(topicId);
if (StringUtil.isEmpty(page)) {
page="1";
}
PageBean pageBean=new PageBean(Integer.parseInt(page), 10);
replyList=replyService.findReplyListByTopicId(topicId, pageBean);
for(Reply reply : replyList){
long count=replyService.getSonCountByRid(reply.getId());
son.put(reply, count);
sonList=replyService.getsonListByRid(reply.getId());
sonReplyList.put(reply, sonList);
}
total=replyService.getReplyCountByTopicId(topicId);
StringBuffer param=new StringBuffer();
if (topicId>0) {
param.append("topicId="+topicId);
}
pageCode=PageUtil.genPagination(request.getContextPath()+"/Topic_details.action", total, Integer.parseInt(page), 10,param.toString());
return "details";
}empty

因为我的项目回复表只采用一张,没有子回复表,再者建两张回复表提交保存的时候,要准备两提交张表单,或者要在服务器端加各种判断,。所以,我的目标是在一张回复表上加上各种标识符来区分子回复与父回复。如上图所示,用户对发帖者回复的时候,为父回复,即第一回复,其他人可以对该回复进行深一层的回复与评论,这层分为子回复。我的思路是,对第一级回复做一个回复链接,点击回复时,通过js函数得到当前级回复的Id,然后保存子回复的时候,服务器端通过第一级的I回复d得到发表者对象,获取该对象的邮箱,通过邮箱服务器向该用户发出邮件,提示有人对你的评论做出了回复。同时对子回复记录状态设为0,即动态信息提示,发表父级回复的人登录之后会显示所有状态为0的信息总数,用户点击查看即可。这样就做到了双重智能提示功能。

数据库倒数第二列中,即是子回复与父回复的标识符,子回复记录了父回复的id,通过查询语句,只需要查询所有标识id为父级回复id的集合就行了,这里就涉及到了嵌套查询。

项目运行截图:

public String details()throws Exception{topic=topicService.findTopicById(topicId);if (StringUtil.isEmpty(page)) {page="1";}PageBean pageBean=new PageBean(Integer.parseInt(page), 10);replyList=replyService.findReplyListByTopicId(topicId, pageBean);for(Reply reply : replyList){long count=replyService.getSonCountByRid(reply.getId());son.put(reply, count);sonList=replyService.getsonListByRid(reply.getId());sonReplyList.put(reply, sonList);}total=replyService.getReplyCountByTopicId(topicId);StringBuffer param=new StringBuffer();if (topicId>0) {param.append("topicId="+topicId);}pageCode=PageUtil.genPagination(request.getContextPath()+"/Topic_details.action", total, Integer.parseInt(page), 10,param.toString());return "details";}

2..发邮件动态提醒功能:

public String save()throws Exception{reply.setPublishTime(new Date());reply.setStatus(0);    replyService.saveReply(reply);Topic topic=topicService.findTopicById(reply.getTopic().getId());User Tuser=userService.getUserById(topic.getUser().getId());   //2017.04.27   得到发帖人,向其发送邮件**1**topic.setModifyTime(new Date());topicService.saveTopic(topic);// 2017.04.27回复功能拓展,通过邮箱的方式提醒用户。  **2**User currentUser=userService.getUserById(reply.getUser().getId());//2017.05.01  回复帖子实现用户积分+1currentUser.setScore(currentUser.getScore()+1);       userService.saveUser(currentUser);  if(reply.getTitle().equals("")){/** 3. 发邮件   **3*** 把配置文件内容加载到prop中*/Properties prop = new Properties();try {prop.load(this.getClass().getClassLoader().getResourceAsStream("email_template2.properties"));} catch (IOException e1) {throw new RuntimeException(e1);}/** 登录邮件服务器,得到session*/String host = prop.getProperty("host");//服务器主机名String name = prop.getProperty("username");//登录名String pass = prop.getProperty("password");//登录密码Session session = MailUtils.createSession(host, name, pass);/** 创建Mail对象*/String from = prop.getProperty("from");String to = Tuser.getEmail();    String subject = prop.getProperty("subject");// MessageForm.format方法会把第一个参数中的{0},使用第二个参数来替换。// 例如MessageFormat.format("你好{0}, 你{1}!", "张三", "去死吧"); 返回“你好张三,你去死吧!”String content = MessageFormat.format(prop.getProperty("content"), topic.getId());Mail mail = new Mail(from, to, subject, content);/** 发送邮件*/try {MailUtils.send(session, mail);System.out.println("发送成功");} catch (MessagingException e) {throw new RuntimeException(e);} catch (IOException e) {throw new RuntimeException(e);}}else{Reply father=replyService.findReplyById(Integer.parseInt(reply.getTitle()));

3.jsp代码块:

<td style="width:21%;"><fmt:formatDate value="${sonReply.publishTime }" pattern="yy-MM-dd HH:mm "/> <a href="#1" style="font-size: 9pt;text-align:right;color:gray;"οnclick='reply("${sonReply.user.nickName }","","${reply.id }")'>回复</a></td></tr></table></dd></c:forEach><dd><c:choose><c:when test="${son.get(reply)-6>0 }">.............................................................................还有(${son.get(reply)-6 })条,<a href="Reply_details.action?rid=${reply.id }" style="font-size: 9pt;text-align:right;color:blue;" target="_blank">查看更多</a></c:when><c:otherwise></c:otherwise></c:choose>

综上,完整的嵌套回复以及动态提醒功能算是正式完成了,虽然还有很多不足,但毕竟是自己辛辛苦苦想出来的思路,条条大路通罗马。只要你敢去尝试,前方也许是别样的风景。另外附上项目网站,大家可以亲自去体验一下这个功能的实用性。附上网址  http://sharehoo.cn/Topic_details.action?topicId=38

仿百度贴吧回帖功能分析及代码示例相关推荐

  1. 防仿百度图片背景色php,基于jQuery实现仿百度首页换肤背景图片切换代码_jquery...

    不多说了,先给大家展示效果图,本文支持源码下载哦,需要的朋友可以直接下载使用,代码很简单哦- html代码: css代码: *{margin:0;padding:0} a{color:#fff; ma ...

  2. 仿百度搜索首页完整代码

    仿百度首页未登陆状态页面 初学HTML 做个小记录 看看就好,也可以共同学习一下 做的时候也有很多问题,现在也有点懵,还请各位看完指出问题 <!DOCTYPE html> <html ...

  3. Android 高仿百度地图的LBS服务——离线地图篇 Part 2 (v 3.1.1)

    一.前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/41492031 这一篇blog写的真心不容易,我只想说我这种菜鸟去高仿百度 ...

  4. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](三) 之 使用JODConverter将office文档转换为pdf...

    第三步,使用JODConverter将office文档转换为pdf JODConverter是一个java的OpenDucument文件转换器,可以进行许多文件格式的转换,它利用 OpenOffice ...

  5. 使用JQuery完成仿百度的信息提示

    使用JQuery完成仿百度的信息提示 1.需求分析 在一个搜索页面中,键盘输入一些信息,在文本框下面给出一些提示信息(需要从服务器端进行查询的). 2.步骤分析 1.创建一个数据库和表: 2.设计一个 ...

  6. 【转载】FlexPaper+SWFTools 实现仿百度文库及一些小问题

    网上已有很多FlexPaper仿百度文库的一些文章,园子里也有很多大牛的详细教程. 结合这次做的例子,在这里详细记录一下使用Flexpaper实现仿百度文库的效果,及自己在跟着园子里的教程做的时候,遇 ...

  7. 仿百度文库方案[openoffice.org 3+swftools+flexpaper](八) 之 常见问题集FAQ

    1.txt转换swf,发生中文乱码. txt转换为utf-8编码,或txt格式手动改为odt,上传就不会发生乱码.从根源上解决,暂时就算了...暂时不想去纠结这些鸡毛. 2.加密的pdf可能导致转换为 ...

  8. 【转】asp仿百度文库、豆丁doc转换(flashpaper)

    [转]asp仿百度文库.豆丁doc转换(flashpaper)     asp仿百度文库.豆丁doc转换(flashpaper)环境: flashpaper2.2版 win2008 IIS7 步骤: ...

  9. php 点击下拉显示内容,php+ajax实现仿百度查询下拉内容功能示例

    本文实例讲述了php+ajax实现仿百度查询下拉内容功能.分享给大家供大家参考,具体如下: 运行效果如下: html代码: Document body{ margin:0; padding: 0; } ...

最新文章

  1. 垂直margin合并问题
  2. 09 numpy 聚合函数 - 极值,方差,标准差
  3. Codeforces Round #220 (Div. 2)
  4. link time code generation
  5. Android 轮询最佳实践 Service + AlarmManager
  6. 搞定WordPress的日志自动截断
  7. 完全编译安装boost
  8. Shell: /dev/null 21详解
  9. java 获取音频文件时长
  10. Django常用代码基本语句
  11. 关于iconfont的一些东西
  12. Ubuntu18.04中配置QT5.11开发环境
  13. Matlab与C/C++混合编程 Matlab调用C函数
  14. toString和valueOf使得对象访问时显示一个特定格式的字符串,但是可以进行数字运算...
  15. 20130331java语言基础学习笔记-语句_breakcontinue
  16. 计算机社团个人简介怎么写,社团个人简历怎么写
  17. K均值聚类算法以及模糊K均值算法研究,matlab
  18. Kafka 常用命令
  19. java学习php(一)基础知识
  20. eclipse中刷新项目

热门文章

  1. 站在营销看工作,偶发几点小心得
  2. 导数、微分、积分的几何理解
  3. 什么大牛不大牛,先A500题再说吧
  4. Nature综述:大脑中的音乐
  5. CentOS安装星际译王
  6. 三相永磁同步电机无速度传感器控制(基于扩展反电动势)
  7. 静态成员-静态成员变量
  8. SCI/ISTP和EI论文检索号IDS number和收录号查询方法
  9. html像素测量尺,屏幕尺子:ruul.Screen ruler
  10. BOOtbootstrap框架应用