基於SSH框架的小型論壇項目 javascript
1、項目入門 傳送門css
2、框架整合 傳送門html
3、用戶模塊 傳送門前端
4、頁面顯示 傳送門java
5、帖子模塊 傳送門mysql
6、點贊模塊 傳送門jquery
7、輔助模塊 傳送門web
回覆帖子spring
分析回覆帖子sql
拿到paste.title標籤
<a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a>
編寫查看帖子模型驅動
帖子模型驅動Web層
//查看帖子詳細信息 public String getDetail() throws Exception{ Paste paste = pasteService.findAllPasteByIdReturnPaste(pasteid); ActionContext.getContext().put("paste", paste); return "detail"; }
帖子模型驅動Service層
public Paste findAllPasteByIdReturnPaste(String pasteid) { return pasteDao.findPasteByIdReturnPaste(pasteid); }
帖子模板Dao層
public Paste findPasteByIdReturnPaste(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); query.setParameter(1, pasteid); Paste result = (Paste) query.uniqueResult(); return result; }
帖子前端頁面
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body> <iframe src="head.html" scrolling="no" width="100%" height="65px" ></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1>帖子標題</h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span><span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> 2 </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt="頭像"> <cite> 壓縮 <em>2017-05-01發佈</em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"><a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p>帖子內容</p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <!-- <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> --> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> --> </div></li> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>香菇</i> <em style="color:#FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span>剛剛</span> </div> </div> <div class="detail-body jieda-body"> <p>藍瘦</p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> <!-- <li class="fly-none">沒有任何回答</li> --> </ul> <span id="toName">@ 壓縮(樓主)</span> <div class="layui-form layui-form-pane"> <form action=""> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> </dl> </div> </div> <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link'] }); </script> </body> </html>
動態從數據庫中獲取帖子模塊內容
<div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div>
Web層
package com.Gary.web; import java.text.SimpleDateFormat; import java.util.Date; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.service.PasteService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class PasteAction extends ActionSupport implements ModelDriven<Paste> { public Paste paste = new Paste(); private PasteService pasteService; private String pasteid; //查看帖子詳細信息 public String getDetail() throws Exception{ Paste paste = pasteService.findAllPasteByIdReturnPaste(pasteid); ActionContext.getContext().put("paste", paste); return "detail"; } //添加帖子 public String addPaste() throws Exception { User user = (User)ActionContext.getContext().getSession().get("user"); if(user==null) { ActionContext.getContext().put("error", "只有登錄以後才能夠發帖子!!"); return "error"; } //private Integer ansnum; paste.setAnsnum(0); //private String createtime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String createtime = format.format(date); paste.setCreatetime(createtime); //private Integer glanceover; paste.setGlanceover(0); //是否結帖 0未結 1結束 //private Integer solve; paste.setSolve(0); //private Integer isdelete; paste.setIsdelete(0); //private User user; paste.setUser(user); pasteService.addPaste(paste); //重定向到主頁 return "toIndex"; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } @Override public Paste getModel() { // TODO Auto-generated method stub return paste; } public String getPasteid() { return pasteid; } public void setPasteid(String pasteid) { this.pasteid = pasteid; } }
Service層
package com.Gary.service; import java.util.List; import com.Gary.dao.PasteDao; import com.Gary.domain.Paste; import com.Gary.utils.PageBean; public class PasteService { private PasteDao pasteDao; public Paste findAllPasteByIdReturnPaste(String pasteid) { return pasteDao.findPasteByIdReturnPaste(pasteid); } public PageBean getGlanceoverPageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean glanceoverPageBean = new PageBean(currentPage, totalCount, 8); List<Paste> list = pasteDao.getGlanceoverPageList(); glanceoverPageBean.setList(list); return glanceoverPageBean; } public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean pageBean = new PageBean(currentPage,totalCount,8); List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize()); pageBean.setList(list); return pageBean; } public PasteDao getPasteDao() { return pasteDao; } public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) { this.pasteDao = pasteDao; } public void addPaste(Paste paste) { pasteDao.addPaste(paste); } public PageBean getAnsnumPageBean(Integer currentPage) { //得到全部的帖子數目 Integer totalCount = pasteDao.findAllPasteNum(); //建立PageBean PageBean ansnumPageBean = new PageBean(currentPage, totalCount, 8); //獲得List List<Paste> list = pasteDao.getAnsnumPageList(); //封裝List ansnumPageBean.setList(list); return ansnumPageBean; } }
Dao層
package com.Gary.dao; import java.math.BigInteger; import java.util.List; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.hibernate.query.Query; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(paste); } //HQL public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //書寫SQL語句 String hql = "from com.Gary.domain.Paste"; Query query = session.createQuery(hql); List<Paste> list = query.list(); return list; } //查找全部帖子的數量 public Integer findAllPasteNum() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select count(*) from paste"; NativeQuery query = session.createSQLQuery(sql); BigInteger result = (BigInteger)query.uniqueResult(); return result.intValue(); } //分頁 public List<Paste> getPastePageList(Integer start, Integer pageSize) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste limit ?,?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); query.setParameter(1, start); query.setParameter(2, pageSize); List<Paste> list = query.list(); return list; } //最近熱議 public List<Paste> getGlanceoverPageList() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste order by glanceover desc limit 0,8"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); List list = query.list(); return list; } public List<Paste> getAnsnumPageList() { //獲得與當前線程綁定的session Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //書寫sql String sql = "select * from paste order by ansnum desc limit 0,8"; //得到query NativeQuery query = session.createSQLQuery(sql); //將結果集封裝爲Paste對象 query.addEntity(Paste.class); //得到sql的執行結果(結果爲list) List list = query.list(); return list; } //查看帖子 public Paste findPasteByIdReturnPaste(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); query.setParameter(1, pasteid); Paste result = (Paste) query.uniqueResult(); return result; } }
帖子模塊前端頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <!-- <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> --> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> --> </div></li> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>香菇</i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span>剛剛</span> </div> </div> <div class="detail-body jieda-body"> <p>藍瘦</p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> <!-- <li class="fly-none">沒有任何回答</li> --> </ul> <span id="toName">@ 壓縮(樓主)</span> <div class="layui-form layui-form-pane"> <form action=""> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局(基本結構)</a> <span><i class="iconfont"></i> 6087</span> </dd> <dd> <a href="">Java實現LayIM後端的核心代碼</a> <span><i class="iconfont"></i> 767</span> </dd> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> <dd> <a href="">使用 layui 秒搭後臺大布局之基本結構</a> <span><i class="iconfont"></i> 96</span> </dd> </dl> </div> </div> <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> </body> </html>
當瀏覽一個帖子時,帖子的瀏覽數目須要+1 (數據庫中glanceover+1)
Service層中findAllPasteByIdReturnPaste()編寫傳送數據到Dao層修改數據庫中glanceover語句
public Paste findAllPasteByIdReturnPaste(String pasteid) { pasteDao.addPasteGlanceover(pasteid); //SQL語句寫法:update paste set glanceover = glanceover+1 where id = ?; return pasteDao.findPasteByIdReturnPaste(pasteid); }
帖子回覆glanceover+1
public void addPasteGlanceover(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "update paste set glanceover = glanceover+1 where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, pasteid); query.executeUpdate(); }
package com.Gary.service; import java.util.List; import com.Gary.dao.PasteDao; import com.Gary.domain.Paste; import com.Gary.utils.PageBean; public class PasteService { private PasteDao pasteDao; public Paste findAllPasteByIdReturnPaste(String pasteid) { pasteDao.addPasteGlanceover(pasteid); //SQL語句寫法:update paste set glanceover = glanceover+1 where id = ?; return pasteDao.findPasteByIdReturnPaste(pasteid); } public PageBean getGlanceoverPageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean glanceoverPageBean = new PageBean(currentPage, totalCount, 8); List<Paste> list = pasteDao.getGlanceoverPageList(); glanceoverPageBean.setList(list); return glanceoverPageBean; } public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean pageBean = new PageBean(currentPage,totalCount,8); List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize()); pageBean.setList(list); return pageBean; } public PasteDao getPasteDao() { return pasteDao; } public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) { this.pasteDao = pasteDao; } public void addPaste(Paste paste) { pasteDao.addPaste(paste); } public PageBean getAnsnumPageBean(Integer currentPage) { //得到全部的帖子數目 Integer totalCount = pasteDao.findAllPasteNum(); //建立PageBean PageBean ansnumPageBean = new PageBean(currentPage, totalCount, 8); //獲得List List<Paste> list = pasteDao.getAnsnumPageList(); //封裝List ansnumPageBean.setList(list); return ansnumPageBean; } }
package com.Gary.dao; import java.math.BigInteger; import java.util.List; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.hibernate.query.Query; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(paste); } //HQL public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //書寫SQL語句 String hql = "from com.Gary.domain.Paste"; Query query = session.createQuery(hql); List<Paste> list = query.list(); return list; } //查找全部帖子的數量 public Integer findAllPasteNum() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select count(*) from paste"; NativeQuery query = session.createSQLQuery(sql); BigInteger result = (BigInteger)query.uniqueResult(); return result.intValue(); } //分頁 public List<Paste> getPastePageList(Integer start, Integer pageSize) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste limit ?,?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); query.setParameter(1, start); query.setParameter(2, pageSize); List<Paste> list = query.list(); return list; } //最近熱議 public List<Paste> getGlanceoverPageList() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste order by glanceover desc limit 0,8"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); List list = query.list(); return list; } public List<Paste> getAnsnumPageList() { //獲得與當前線程綁定的session Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //書寫sql String sql = "select * from paste order by ansnum desc limit 0,8"; //得到query NativeQuery query = session.createSQLQuery(sql); //將結果集封裝爲Paste對象 query.addEntity(Paste.class); //得到sql的執行結果(結果爲list) List list = query.list(); return list; } //查看帖子 public Paste findPasteByIdReturnPaste(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from paste where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Paste.class); query.setParameter(1, pasteid); Paste result = (Paste) query.uniqueResult(); return result; } //帖子回覆glanceover+1 public void addPasteGlanceover(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "update paste set glanceover = glanceover+1 where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, pasteid); query.executeUpdate(); } }
爲了儘量少的訪問數據,利用數據持久狀態
public Paste findPasteByIdReturnPaste(String pasteid) { //pasteDao.addPasteGlanceover(pasteid); //數據庫SQL語句:update paste set glanceover = glanceover+1 where id = ?; Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); paste.setGlanceover(paste.getGlanceover()+1); return paste; }
編寫帖子模塊最近熱帖和最近熱議
帖子模塊的最近熱帖和最近熱議應該動態從數據庫中獲取
PasteAction.java
//查看帖子詳細信息 public String getDetail() throws Exception{ //獲得最近熱帖 PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(null); ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //獲得最近熱議 PageBean ansnumPageBean = pasteService.getAnsnumPageBean(null); ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); ActionContext.getContext().put("paste", paste); return "detail"; }
修改detail.jsp
<div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl>
Web層
package com.Gary.web; import java.util.List; import com.Gary.domain.Paste; import com.Gary.service.PasteService; import com.Gary.service.UserService; import com.Gary.utils.PageBean; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class GetDataAction extends ActionSupport{ private PasteService pasteService; private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService; } private Integer currentPage; public String getData() throws Exception { //獲得帖子 PageBean pastePageBean = pasteService.getPastePageBean(currentPage); ActionContext.getContext().put("pastePageBean", pastePageBean); //獲得最近熱帖 PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(currentPage); ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //獲得最近熱議 PageBean ansnumPageBean = pasteService.getAnsnumPageBean(currentPage); ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); //獲得專家排行 PageBean userPageBean = userService.getUserPageBean(currentPage); ActionContext.getContext().put("userPageBean", userPageBean); return "index"; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } public Integer getCurrentPage() { return currentPage; } public void setCurrentPage(Integer currentPage) { this.currentPage = currentPage; } }
package com.Gary.web; import java.text.SimpleDateFormat; import java.util.Date; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.service.PasteService; import com.Gary.utils.PageBean; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class PasteAction extends ActionSupport implements ModelDriven<Paste> { public Paste paste = new Paste(); private PasteService pasteService; private String pasteid; //查看帖子詳細信息 public String getDetail() throws Exception{ //獲得最近熱帖 PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(null); ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //獲得最近熱議 PageBean ansnumPageBean = pasteService.getAnsnumPageBean(null); ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); ActionContext.getContext().put("paste", paste); return "detail"; } //添加帖子 public String addPaste() throws Exception { User user = (User)ActionContext.getContext().getSession().get("user"); if(user==null) { ActionContext.getContext().put("error", "只有登錄以後才能夠發帖子!!"); return "error"; } //private Integer ansnum; paste.setAnsnum(0); //private String createtime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String createtime = format.format(date); paste.setCreatetime(createtime); //private Integer glanceover; paste.setGlanceover(0); //是否結帖 0未結 1結束 //private Integer solve; paste.setSolve(0); //private Integer isdelete; paste.setIsdelete(0); //private User user; paste.setUser(user); pasteService.addPaste(paste); //重定向到主頁 return "toIndex"; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } @Override public Paste getModel() { // TODO Auto-generated method stub return paste; } public String getPasteid() { return pasteid; } public void setPasteid(String pasteid) { this.pasteid = pasteid; } }
前端頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <!-- <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> --> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> --> </div></li> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>香菇</i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span>剛剛</span> </div> </div> <div class="detail-body jieda-body"> <p>藍瘦</p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> <!-- <li class="fly-none">沒有任何回答</li> --> </ul> <span id="toName">@ 壓縮(樓主)</span> <div class="layui-form layui-form-pane"> <form action=""> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> </body> </html>
分析回覆帖子模塊
建立回覆帖子Action骨架
public class AnswerAction extends ActionSupport implements ModelDriven<Answer>{ public Answer answer = new Answer(); private AnswerService answerService; public String addAnswer() throws Exception { answerService.addAnswer(answer); return "success"; } public Answer getModel() { return answer; } }
完成Answer實體
private String id; //內容 private String content; //回覆時間 private String anstime; //贊成數 private Integer agree; //是否解決 private Integer solve; private User user; private Paste paste; //登陸的用戶是否點讚了改回復 private Integer loginUserIsAgree;
package com.Gary.domain; public class Answer { private String id; //內容 private String content; //回覆時間 private String anstime; //贊成數 private Integer agree; //是否解決 private Integer solve; private User user; private Paste paste; //登陸的用戶是否點讚了改回復 private Integer loginUserIsAgree; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getContent() { return content; } public void setContent(String content) { this.content = content.replaceAll("<br />", ".");; } public String getAnstime() { return anstime; } public void setAnstime(String anstime) { this.anstime = anstime; } public Integer getAgree() { return agree; } public void setAgree(Integer agree) { this.agree = agree; } public Integer getSolve() { return solve; } public void setSolve(Integer solve) { this.solve = solve; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public Paste getPaste() { return paste; } public void setPaste(Paste paste) { this.paste = paste; } public Integer getLoginUserIsAgree() { return loginUserIsAgree; } public void setLoginUserIsAgree(Integer loginUserIsAgree) { this.loginUserIsAgree = loginUserIsAgree; } }
Web層
package com.Gary.web; import com.Gary.domain.Answer; import com.Gary.service.AnswerService; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class AnswerAction extends ActionSupport implements ModelDriven<Answer>{ public Answer answer = new Answer(); private AnswerService answerService; public String addAnswer() throws Exception { answerService.addAnswer(answer); return "success"; } public Answer getModel() { return answer; } }
Service層
package com.Gary.service; import com.Gary.dao.AnswerDao; import com.Gary.domain.Answer; public class AnswerService { private AnswerDao answerDao; public AnswerDao getAnswerDao() { return answerDao; } public void setAnswerDao(AnswerDao answerDao) { this.answerDao = answerDao; } public void addAnswer(Answer answer) { // TODO Auto-generated method stub answerDao.addAnswer(answer); } }
Dao層
package com.Gary.dao; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Answer; public class AnswerDao extends HibernateDaoSupport{ public void addAnswer(Answer answer) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(answer); } }
User.java用戶模塊中添加一個用戶回覆Set<Paste> answerPasteSet
//用戶回覆 private Set<Paste> answerPasteSet = new HashSet<Paste>(); public Set<Paste> getAnswerPasteSet() { return answerPasteSet; } public void setAnswerPasteSet(Set<Paste> answerPasteSet) { this.answerPasteSet = answerPasteSet; }
在User.hbm.xml中添加一對多的關係
<set name="answerPasteSet"> <key column="pasteid"></key> <one-to-many class="Answer"/> </set>
分析用戶帖子一對多的關係
在Paste.java中添加HashSet<User>用戶回覆
private Set<User> userAnswerSet = new HashSet<User>(); public Set<User> getUserAnswerSet() { return userAnswerSet; } public void setUserAnswerSet(Set<User> userAnswerSet) { this.userAnswerSet = userAnswerSet; }
Paste.hbm.xml中綁定用戶與表一對多的關係
<set name="userAnswerSet"> <!-- 外鍵的類名 --> <key column="userid"></key> <!-- 外鍵的類名的類 --> <one-to-many class="Answer"/> </set>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.Gary.domain"> <class name="Answer" table="answer"> <id name="id"> <generator class="uuid"></generator> </id> <property name="content" column="content"></property> <property name="anstime" column="anstime"></property> <property name="agree" column="agree"></property> <property name="solve" column="solve"></property> <many-to-one name="user" column="userid" class="User"></many-to-one> <!-- colum爲外鍵的字段名字 --> <many-to-one name="paste" column="pasteid" class="Paste"></many-to-one> </class> </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.Gary.domain"> <class name="Paste" table="paste"> <id name="id"> <generator class="uuid"></generator> </id> <!--private String title; private String content; private Integer offer; private Integer ansnum; private String createtime; private Integer glanceover; //是否結帖 private Integer solve; private Integer isdelete;--> <property name="title" column="title"></property> <property name="content" column="content"></property> <property name="offer" column="offer"></property> <property name="ansnum" column="ansnum"></property> <property name="createtime" column="createtime"></property> <property name="glanceover" column="glanceover"></property> <property name="solve" column="solve"></property> <property name="isdelete" column="isdelete"></property> <many-to-one name="user" class="User" column="userid" insert="true"></many-to-one> <set name="userAnswerSet"> <!-- 外鍵的類名 --> <key column="userid"></key> <!-- 外鍵的類名的類 --> <one-to-many class="Answer"/> </set> </class> </hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.Gary.domain"> <class name="Answer" table="answer"> <id name="id"> <generator class="uuid"></generator> </id> <property name="content" column="content"></property> <property name="anstime" column="anstime"></property> <property name="agree" column="agree"></property> <property name="solve" column="solve"></property> <many-to-one name="user" column="userid" class="User"></many-to-one> <!-- colum爲外鍵的字段名字 --> <many-to-one name="paste" column="pasteid" class="Paste"></many-to-one> </class> </hibernate-mapping>
此時點擊提交回答按鈕後表單沒法發送問題!!!
修改detail中的表單
<div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div>
能夠看到,修改完表單後,在未登陸的輕快下,點擊提交回答按鈕後頁面會自動跳轉到登錄頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <!-- <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> --> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> --> </div></li> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>香菇</i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span>剛剛</span> </div> </div> <div class="detail-body jieda-body"> <p>藍瘦</p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> <!-- <li class="fly-none">沒有任何回答</li> --> </ul> <span id="toName">@ 壓縮(樓主)</span> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/PasteAction_addPaste"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
測試登錄用戶發帖模塊
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <!-- <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> --> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> --> </div></li> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>香菇</i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span>剛剛</span> </div> </div> <div class="detail-body jieda-body"> <p>藍瘦</p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i><em>0</em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> <!-- <li class="fly-none">沒有任何回答</li> --> </ul> <span id="toName">@ 壓縮(樓主)</span> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
此時發現跳轉過來的頁面所有問題、最近熱帖、最近熱議、專家排行榜都是空的白的,接下來須要實現重定向到Action
添加addAnswer()請求,若是用戶成功回覆,則返回"toDetail「
public String addAnswer() throws Exception { User user = (User) ActionContext.getContext().getSession().get("user"); if(user == null) { ActionContext.getContext().put("error", "未登陸不能回覆!!"); return "error"; } // //回覆時間 // private String anstime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String anstime = format.format(date); answer.setAnstime(anstime); // //贊成數 // private Integer agree; answer.setAgree(0); // //是否解決 // private Integer solve; answer.setSolve(0); // // private User user; answer.setUser(user); // // private Paste paste; Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); answer.setPaste(paste); answerService.addAnswer(answer,paste); answerService.addAnswer(answer); return "toDetail"; }
在struts.xml中配置toDetail結果集成重定向到action中
<action name="AnswerAction_*" class="com.Gary.web.AnswerAction" method="{1}"> <result name="error">/login.jsp</result> <!-- 重定向到Action --> <result name="toDetail" type="redirectAction"> <param name="actionName">PasteAction_getDetail</param> <!-- struts不認識pasteid則會封裝到重定向的action中 --> <param name="pasteid">${pasteid}</param> </result> </action> </package>
package com.Gary.web; import java.text.SimpleDateFormat; import java.util.Date; import com.Gary.domain.Answer; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.service.AnswerService; import com.Gary.service.PasteService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class AnswerAction extends ActionSupport implements ModelDriven<Answer>{ public Answer answer = new Answer(); private AnswerService answerService; private String pasteid; private PasteService pasteService; public AnswerService getAnswerService() { return answerService; } public void setAnswerService(AnswerService answerService) { this.answerService = answerService; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } public String getPasteid() { return pasteid; } public void setPasteid(String pasteid) { this.pasteid = pasteid; } public String addAnswer() throws Exception { User user = (User) ActionContext.getContext().getSession().get("user"); if(user == null) { ActionContext.getContext().put("error", "未登陸不能回覆!!"); return "error"; } // //回覆時間 // private String anstime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String anstime = format.format(date); answer.setAnstime(anstime); // //贊成數 // private Integer agree; answer.setAgree(0); // //是否解決 // private Integer solve; answer.setSolve(0); // // private User user; answer.setUser(user); // // private Paste paste; Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); answer.setPaste(paste); answerService.addAnswer(answer,paste); answerService.addAnswer(answer); return "toDetail"; } public Answer getModel() { return answer; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--開啓動態方法調用 --> <constant name="struts.devMode" value="true"></constant> <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- 告訴struts不用本身建立Action,Spring來幫你建立 --> <constant name="struts.objectFactory" value="spring"></constant> <package name="Gary_SSHForum" namespace="/" extends="struts-default"> <!-- 容許所有方法 --> <global-allowed-methods>regex:.*</global-allowed-methods> <action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}"> <result name="toLogin" type="redirect">/login.jsp</result> <result name="login">/login.jsp</result> <result name="toIndex" type="redirect">/default.jsp</result> <result name="error">/login.jsp</result> <result name="toRegisterSuccess" type="redirect">/registerSuccess.jsp</result> </action> <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}"> <!-- 從定向到jsp --> <result name="toIndex" type="redirect">/default.jsp</result> <result name="error">/login.jsp</result> <!-- 轉發到jsp --> <result name="detail">/detail.jsp</result> </action> <action name="GetDataAction_*" class="com.Gary.web.GetDataAction" method="{1}"> <result name="index" >/index.jsp</result> </action> <action name="AnswerAction_*" class="com.Gary.web.AnswerAction" method="{1}"> <result name="error">/login.jsp</result> <!-- 重定向到Action --> <result name="toDetail" type="redirectAction"> <param name="actionName">PasteAction_getDetail</param> <!-- struts不認識pasteid則會封裝到重定向的action中 --> <param name="pasteid">${pasteid}</param> </result> </action> </package> </struts>
查看全部回覆
分析查看回復
Web層
package com.Gary.web; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import com.Gary.domain.Answer; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.service.AnswerService; import com.Gary.service.PasteService; import com.Gary.utils.PageBean; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class PasteAction extends ActionSupport implements ModelDriven<Paste> { public Paste paste = new Paste(); private String pasteid; private PasteService pasteService; private AnswerService answerService; //查看帖子詳細信息 public String getDetail() throws Exception{ //獲得最近熱帖 PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(null); ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //獲得最近熱議 PageBean ansnumPageBean = pasteService.getAnsnumPageBean(null); ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); //得到帖子 Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); ActionContext.getContext().put("paste", paste); //得到該帖子的全部回覆 List<Answer> answerList = answerService.findAllAnswerByPasteid(pasteid); ActionContext.getContext().put("answerList", answerList); return "detail"; } public AnswerService getAnswerService() { return answerService; } public void setAnswerService(AnswerService answerService) { this.answerService = answerService; } //添加帖子 public String addPaste() throws Exception { User user = (User)ActionContext.getContext().getSession().get("user"); if(user==null) { ActionContext.getContext().put("error", "只有登錄以後才能夠發帖子!!"); return "error"; } //private Integer ansnum; paste.setAnsnum(0); //private String createtime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String createtime = format.format(date); paste.setCreatetime(createtime); //private Integer glanceover; paste.setGlanceover(0); //是否結帖 0未結 1結束 //private Integer solve; paste.setSolve(0); //private Integer isdelete; paste.setIsdelete(0); //private User user; paste.setUser(user); pasteService.addPaste(paste); //重定向到主頁 return "toIndex"; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } @Override public Paste getModel() { // TODO Auto-generated method stub return paste; } public String getPasteid() { return pasteid; } public void setPasteid(String pasteid) { this.pasteid = pasteid; } }
Service層
package com.Gary.service; import java.util.List; import com.Gary.dao.AnswerDao; import com.Gary.domain.Answer; import com.Gary.domain.Paste; public class AnswerService { private AnswerDao answerDao; public List<Answer> findAllAnswerByPasteid(String pasteid) { List<Answer> answerList = answerDao.findAllAnswerByPasteid(pasteid); return answerList; } public AnswerDao getAnswerDao() { return answerDao; } public void setAnswerDao(AnswerDao answerDao) { this.answerDao = answerDao; } public void addAnswer(Answer answer) { // TODO Auto-generated method stub answerDao.addAnswer(answer); } public void addAnswer(Answer answer, Paste paste) { paste.setAnsnum(paste.getAnsnum() + 1); answerDao.addAnswer(answer); } }
Dao層
package com.Gary.dao; import java.util.List; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Answer; public class AnswerDao extends HibernateDaoSupport{ public void addAnswer(Answer answer) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(answer); } public List<Answer> findAllAnswerByPasteid(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where pasteid = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, pasteid); List<Answer> list = query.list(); return list; } }
前端樣式的美化
<div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <label for="L_title" class="layui-form-label" style="width: 690px; height: 40px;"> <div style="margin-left: -580px">回答問題:</div> </label> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <!-- <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> </div></li> --> <s:iterator value="#answerList" var="answer"> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#answer.user.image"/>" alt=""> <cite> <i><s:property value="#answer.user.username" /></i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span> <s:property value="#answer.anstime" /> </span> </div> </div> <div class="detail-body jieda-body"> <p><s:property value="#answer.content" /></p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i> <em> <s:property value="#answer.agree" /></em> </span> <div class="jieda-admin"> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </div> </div></li> </s:iterator> <s:if test="#answerList.size()==0"> <li class="fly-none">沒有任何回答</li> </s:if> </ul> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <label for="L_title" class="layui-form-label" style="width: 690px; height: 40px;"> <div style="margin-left: -580px">回答問題:</div> </label> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
刪除與採納的顯示
判斷當前回覆帖子人是登錄名本身的,顯示能夠刪除帖子
<s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if>
判斷當前發帖人是登陸名本身的,顯示能夠採納帖子
<s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </s:if>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <!-- <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> </div></li> --> <s:iterator value="#answerList" var="answer"> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#answer.user.image"/>" alt=""> <cite> <i><s:property value="#answer.user.username" /></i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span> <s:property value="#answer.anstime" /> </span> </div> </div> <div class="detail-body jieda-body"> <p><s:property value="#answer.content" /></p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i> <em> <s:property value="#answer.agree" /></em> </span> <div class="jieda-admin"> <s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="#" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if> <s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </s:if> </div> </div></li> </s:iterator> <s:if test="#answerList.size()==0"> <li class="fly-none">沒有任何回答</li> </s:if> </ul> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <label for="L_title" class="layui-form-label" style="width: 690px; height: 40px;"> <div style="margin-left: -580px">回答問題:</div> </label> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
分析刪除回覆
刪除和採納
<div class="jieda-admin"> <s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="${pageContext.request.contextPath }/AnswerAction_deleteAnswer?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if> <s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </s:if> </div>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <!-- <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> </div></li> --> <s:iterator value="#answerList" var="answer"> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#answer.user.image"/>" alt=""> <cite> <i><s:property value="#answer.user.username" /></i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span> <s:property value="#answer.anstime" /> </span> </div> </div> <div class="detail-body jieda-body"> <p> <s:property value="#answer.content" /> </p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i> <em> <s:property value="#answer.agree" /></em> </span> <div class="jieda-admin"> <s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="${pageContext.request.contextPath }/AnswerAction_deleteAnswer?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if> <s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="#" class="layui-btn layui-btn-small">採納</a></span> </s:if> </div> </div></li> </s:iterator> <s:if test="#answerList.size()==0"> <li class="fly-none">沒有任何回答</li> </s:if> </ul> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <label for="L_title" class="layui-form-label" style="width: 690px; height: 40px;"> <div style="margin-left: -580px">回答問題:</div> </label> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
Web層:當增長帖子時,帖子數+1
//刪除answer public String deleteAnswer() throws Exception { Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); answerService.deleteAnswerById(answerid,paste); ActionContext.getContext().put("pasteid", pasteid); return "toDetail"; } //添加answer public String addAnswer() throws Exception { User user = (User) ActionContext.getContext().getSession().get("user"); if(user == null) { ActionContext.getContext().put("error", "未登陸不能回覆!!"); return "error"; }
package com.Gary.web; import java.text.SimpleDateFormat; import java.util.Date; import com.Gary.domain.Answer; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.service.AnswerService; import com.Gary.service.PasteService; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; import com.opensymphony.xwork2.ModelDriven; public class AnswerAction extends ActionSupport implements ModelDriven<Answer>{ public Answer answer = new Answer(); private AnswerService answerService; private String pasteid; private PasteService pasteService; private String answerid; public String getAnswerid() { return answerid; } public void setAnswerid(String answerid) { this.answerid = answerid; } public AnswerService getAnswerService() { return answerService; } public void setAnswerService(AnswerService answerService) { this.answerService = answerService; } public PasteService getPasteService() { return pasteService; } public void setPasteService(PasteService pasteService) { this.pasteService = pasteService; } public String getPasteid() { return pasteid; } public void setPasteid(String pasteid) { this.pasteid = pasteid; } //刪除answer public String deleteAnswer() throws Exception { Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); answerService.deleteAnswerById(answerid,paste); ActionContext.getContext().put("pasteid", pasteid); return "toDetail"; } //添加answer public String addAnswer() throws Exception { User user = (User) ActionContext.getContext().getSession().get("user"); if(user == null) { ActionContext.getContext().put("error", "未登陸不能回覆!!"); return "error"; } // //回覆時間 // private String anstime; Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); String anstime = format.format(date); answer.setAnstime(anstime); // //贊成數 // private Integer agree; answer.setAgree(0); // //是否解決 // private Integer solve; answer.setSolve(0); // // private User user; answer.setUser(user); // // private Paste paste; Paste paste = pasteService.findPasteByIdReturnPaste(pasteid); answer.setPaste(paste); answerService.addAnswer(answer,paste); return "toDetail"; } public Answer getModel() { return answer; } }
Service層
public void addAnswer(Answer answer, Paste paste) { paste.setAnsnum(paste.getAnsnum() + 1); answerDao.addAnswer(answer); } public void deleteAnswerById(String answerid, Paste paste) { paste.setAnsnum(paste.getAnsnum()-1); answerDao.deleteAnswerById(answerid); }
package com.Gary.service; import java.util.List; import com.Gary.dao.AnswerDao; import com.Gary.domain.Answer; import com.Gary.domain.Paste; public class AnswerService { private AnswerDao answerDao; public List<Answer> findAllAnswerByPasteid(String pasteid) { List<Answer> answerList = answerDao.findAllAnswerByPasteid(pasteid); return answerList; } public void addAnswer(Answer answer, Paste paste) { paste.setAnsnum(paste.getAnsnum() + 1); answerDao.addAnswer(answer); } public void deleteAnswerById(String answerid, Paste paste) { paste.setAnsnum(paste.getAnsnum()-1); answerDao.deleteAnswerById(answerid); } public AnswerDao getAnswerDao() { return answerDao; } public void setAnswerDao(AnswerDao answerDao) { this.answerDao = answerDao; } }
Dao層:操做數據庫
public void addAnswer(Answer answer) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(answer); } public List<Answer> findAllAnswerByPasteid(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where pasteid = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, pasteid); List<Answer> list = query.list(); return list; } public void deleteAnswerById(String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "delete from answer where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, answerid); query.executeUpdate(); //session.delete(answerid, Answer.class); }
package com.Gary.dao; import java.util.List; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Answer; public class AnswerDao extends HibernateDaoSupport{ public void addAnswer(Answer answer) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(answer); } public List<Answer> findAllAnswerByPasteid(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where pasteid = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, pasteid); List<Answer> list = query.list(); return list; } public void deleteAnswerById(String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "delete from answer where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, answerid); query.executeUpdate(); //session.delete(answerid, Answer.class); } }
能夠看到,進入帖子後,帖子瀏覽數目+1,當增長回帖時,帖子數+1,當刪除回帖時,帖子數-1
添加屬性與元數據字段
private String answerid;
<property name="answerid" column="answerid"></property>
分析採納帖子
detail.jsp
<s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="${pageContext.request.contextPath }/PasteAction_solvePaste?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-small">採納</a> </span> </s:if>
Web層:採納用戶回帖
public String solvePaste() throws Exception{ pasteService.solvePasteByIdAndAnswerid(pasteid,paste.getAnswerid()); ActionContext.getContext().put("pasteid", pasteid); return "toDetail"; }
Service層:得到Web層數據傳遞到Dao層
public void solvePasteByIdAndAnswerid(String pasteid, String answerid) { pasteDao.solvePasteByIdAndAnswerid(pasteid,answerid); }
Dao層:進行數據的處理
public void solvePasteByIdAndAnswerid(String pasteid, String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql ="update paste set solve = 1, answerid = ? where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, answerid); query.setParameter(2, pasteid); query.executeUpdate(); }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>問題詳情</title> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="keywords" content="fly,layui,前端社區"> <meta name="description" content=""> <link rel="stylesheet" href="res/layui/css/layui.css"> <link rel="stylesheet" href="res/css/global.css"> <script src="res/layui/layui.js"></script> <script src="js/jquery.js"></script> <style type="text/css" rel="stylesheet"> form { margin: 0; } .editor { margin-top: 5px; margin-bottom: 5px; } </style> </head> <body style="margin: -2px"> <iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe> <div class="main layui-clear"> <div class="wrap"> <div class="content detail"> <div class="fly-panel detail-box"> <h1> <s:property value="#paste.title" /> </h1> <div class="fly-tip fly-detail-hint" data-id=""> <span class="fly-tip-stick">置頂帖</span> <span class="jie-admin"> <a href="">點擊置頂</a> </span> <span class="layui-btn layui-btn-mini jie-admin"> <a href="">取消置頂</a> </span> <span class="jie-admin" type="del" style="margin-left: 20px;"> <a>刪除該帖</a> </span> </span> <div class="fly-list-hint"> <i class="iconfont" title="回答"></i> <s:property value="#paste.ansnum" /> </div> </div> <div class="detail-about"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" alt="頭像"> <cite> <s:property value="#paste.user.username" /> <em> <s:property value="#paste.createtime" /> 發佈 </em> </cite> </a> <div class="detail-hits" data-id="{{rows.id}}"> <span class="layui-btn layui-btn-mini jie-admin"> <a href="#">已完帖,沒法編輯</a> </span> <span class="layui-btn layui-btn-mini jie-admin" type="collect" data-type="add"> <a id="collectPost">收藏</a> </span> <span class="layui-btn layui-btn-mini jie-admin layui-btn-danger" type="collect" data-type="add"> <a>取消收藏</a> </span> </div> </div> <div class="detail-body photos" style="margin-bottom: 20px;"> <p> <s:property value="#paste.content" /> </p> </div> </div> <div class="fly-panel detail-box" style="padding-top: 0;"> <a name="comment"></a> <ul class="jieda photos" id="jieda"> <!-- <li data-id="12" class="jieda-daan"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="res/images/uer.jpg" alt=""> <cite> <i>紙飛機</i> <em>(樓主)</em> <em style="color:#5FB878">(管理員)</em> </cite> </a> <div class="detail-hits"> <span>3分鐘前</span> </div> <i class="iconfont icon-caina" title="最佳答案"></i> </div> <div class="detail-body jieda-body"> <p>麼麼噠</p> </div> <div class="jieda-reply"> <span class="jieda-zan zanok" type="zan"><i class="iconfont icon-zan"></i><em>12</em> </span> <!-- <div class="jieda-admin"> <span type="del">刪除</span> <span class="jieda-accept" type="accept">採納</span> </div> </div></li> --> <s:iterator value="#answerList" var="answer"> <li data-id="13"><a name="item-121212121212"></a> <div class="detail-about detail-about-reply"> <a class="jie-user" href=""> <img src="${pageContext.request.contextPath }/<s:property value="#answer.user.image"/>" alt=""> <cite> <i><s:property value="#answer.user.username" /></i> <em style="color: #FF9E3F">活雷鋒</em> </cite> </a> <div class="detail-hits"> <span> <s:property value="#answer.anstime" /> </span> </div> </div> <div class="detail-body jieda-body"> <p> <s:property value="#answer.content" /> </p> </div> <div class="jieda-reply"> <span class="jieda-zan" type="zan"><i class="iconfont icon-zan"></i> <em> <s:property value="#answer.agree" /></em> </span> <div class="jieda-admin"> <s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="${pageContext.request.contextPath }/AnswerAction_deleteAnswer?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if> <s:if test="#session.user.username==#paste.user.username "> <a href="${pageContext.request.contextPath }/PasteAction_solvePaste?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-small">採納</a> </s:if> </div> </div></li> </s:iterator> <s:if test="#answerList.size()==0"> <li class="fly-none">沒有任何回答</li> </s:if> </ul> <div class="layui-form layui-form-pane"> <!-- <form action="${pageContext.request.contextPath }/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <textarea id="L_content" name="content" required lay-verify="required" placeholder="我要回答" class="layui-textarea fly-editor" style="height: 150px;"></textarea> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>提交回答</button> </div> </form> --> <form action="${pageContext.request.contextPath}/AnswerAction_addAnswer"> <input type="hidden" name="pasteid" value="<s:property value="#paste.id"/>"> <label for="L_title" class="layui-form-label" style="width: 690px; height: 40px;"> <div style="margin-left: -580px">回答問題:</div> </label> <div class="layui-form-item layui-form-text"> <div class="layui-input-block"> <div class="editor"> <textarea id="content" name="content" style="width: 690px; height: 300px; visibility: hidden;"></textarea> </div> </div> </div> <div class="layui-form-item"> <button class="layui-btn" lay-filter="*" lay-submit>當即發佈</button> </div> </form> </div> </div> </div> </div> <div class="edge"> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">最近熱帖</dt> <s:iterator value="#glanceoverPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.glanceover" /> </span> </dd> </s:iterator> </dl> <dl class="fly-panel fly-list-one"> <dt class="fly-panel-title">近期熱議</dt> <s:iterator value="#ansnumPageBean.list" var="paste"> <dd> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>"> <s:property value="#paste.title" /> </a> <span> <i class="iconfont"></i> <s:property value="#paste.ansnum" /> </span> </dd> </s:iterator> </dl> </div> </div> <%-- <script type="text/javascript" charset="utf-8" src="res/js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'L_content', resizeMode : 1, items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> --%> <script type="text/javascript" charset="utf-8" src="js/kindeditor.js"></script> <script type="text/javascript"> KE.show({ id : 'content', resizeMode : 1, cssPath : './index.css', items : [ 'fontname', 'fontsize', 'textcolor', 'bgcolor', 'bold', 'italic', 'underline', 'removeformat', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist', 'insertunorderedlist', 'emoticons', 'image', 'link' ] }); </script> <script> layui.cache.page = ''; layui.cache.user = { username : '遊客', uid : -1, avatar : '../res/images/avatar/00.jpg', experience : 83, sex : '男' }; layui.config({ version : "2.0.0", base : '../res/mods/' }).extend({ fly : 'index' }).use('fly'); </script> </body> </html>
實現採納問題
<div class="jieda-admin"> <s:if test="#session.user.username==#answer.user.username "> <span type="del"><a href="${pageContext.request.contextPath }/AnswerAction_deleteAnswer?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-danger layui-btn-small">刪除</a></span> </s:if> <s:if test="#session.user.username==#paste.user.username "> <a href="${pageContext.request.contextPath }/PasteAction_solvePaste?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-small">採納</a> </s:if> </div>
Service層
public List<Answer> findAllAnswerByPasteid(String pasteid) { Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); List<Answer> answerList = null; // 判斷paste中的solve是否爲1 if (paste.getSolve() == 1) { // 查找最佳答案 Answer answer = answerDao.findAnswerById(paste.getAnswerid()); // 查找全部答案 answerList = answerDao.findAllAnswerByPasteid(pasteid); // 查找全部答案中包括了最佳答案因此將最佳答案刪除 answerList.remove(answer); // 在頭元素中插入最佳答案 answerList.add(0, answer); } else { answerList = answerDao.findAllAnswerByPasteid(pasteid); } return answerList; }
package com.Gary.service; import java.util.List; import com.Gary.dao.AnswerDao; import com.Gary.dao.PasteDao; import com.Gary.domain.Answer; import com.Gary.domain.Paste; public class AnswerService { private AnswerDao answerDao; private PasteDao pasteDao; public List<Answer> findAllAnswerByPasteid(String pasteid) { Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); List<Answer> answerList = null; // 判斷paste中的solve是否爲1 if (paste.getSolve() == 1) { // 查找最佳答案 Answer answer = answerDao.findAnswerById(paste.getAnswerid()); // 查找全部答案 answerList = answerDao.findAllAnswerByPasteid(pasteid); // 查找全部答案中包括了最佳答案因此將最佳答案刪除 answerList.remove(answer); // 在頭元素中插入最佳答案 answerList.add(0, answer); } else { answerList = answerDao.findAllAnswerByPasteid(pasteid); } return answerList; } public void addAnswer(Answer answer, Paste paste) { paste.setAnsnum(paste.getAnsnum() + 1); answerDao.addAnswer(answer); } public void deleteAnswerById(String answerid, Paste paste) { paste.setAnsnum(paste.getAnsnum()-1); answerDao.deleteAnswerById(answerid); } public AnswerDao getAnswerDao() { return answerDao; } public void setAnswerDao(AnswerDao answerDao) { this.answerDao = answerDao; } public PasteDao getPasteDao() { return pasteDao; } public void setPasteDao(PasteDao pasteDao) { this.pasteDao = pasteDao; } }
Dao層
public Answer findAnswerById(String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, answerid); Answer result = (Answer) query.uniqueResult(); return result; }
package com.Gary.dao; import java.util.List; import org.hibernate.Session; import org.hibernate.query.NativeQuery; import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Answer; public class AnswerDao extends HibernateDaoSupport{ public void addAnswer(Answer answer) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); session.save(answer); } public List<Answer> findAllAnswerByPasteid(String pasteid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where pasteid = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, pasteid); List<Answer> list = query.list(); return list; } public void deleteAnswerById(String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "delete from answer where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.setParameter(1, answerid); query.executeUpdate(); //session.delete(answerid, Answer.class); } public Answer findAnswerById(String answerid) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); String sql = "select * from answer where id = ?"; NativeQuery query = session.createSQLQuery(sql); query.addEntity(Answer.class); query.setParameter(1, answerid); Answer result = (Answer) query.uniqueResult(); return result; } }
發現當採納問題後,應該隱藏其它問題的採納按鈕,已採納的問題也不可刪除
<s:if test="#session.user.username==#answer.user.username && #paste.answerid!=#answer.id"> <span type="del"> <a href="${pageContext.request.contextPath }/AnswerAction_deleteAnswer?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-danger layui-btn-small">刪除</a> </span> </s:if> <s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="${pageContext.request.contextPath }/PasteAction_solvePaste?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-small">採納</a> </span> </s:if>
添加採納金幣模塊
<s:if test="#session.user.username==#paste.user.username && #paste.solve==0"> <span class="jieda-accept" type="accept"> <a href="${pageContext.request.contextPath }/PasteAction_solvePaste?answerid=<s:property value="#answer.id"/>&pasteid=<s:property value="#paste.id"/>" class="layui-btn layui-btn-small">採納</a> </span> </s:if>
Service層
public void solvePasteByIdAndAnswerid(String pasteid, String answerid) { //給回覆的人添加金幣 Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); //經過answerid查找user Answer answer = answerDao.findAnswerById(answerid); //經過userid找user對象 //User user = userDao.finduserByIdReturnUser(answer.getUser().getId()); //得到answer下的user對象(持久化數據類型) User user = answer.getUser(); //由於是持久化類型對象,便可直接修改屬性,同步到數據庫 user.setCoin(user.getCoin()+paste.getOffer()); //解決問題 pasteDao.solvePasteByIdAndAnswerid(pasteid,answerid); }
package com.Gary.service; import java.util.List; import com.Gary.dao.AnswerDao; import com.Gary.dao.PasteDao; import com.Gary.dao.UserDao; import com.Gary.domain.Answer; import com.Gary.domain.Paste; import com.Gary.domain.User; import com.Gary.utils.PageBean; public class PasteService { private PasteDao pasteDao; private AnswerDao answerDao; private UserDao userDao; public void solvePasteByIdAndAnswerid(String pasteid, String answerid) { //給回覆的人添加金幣 Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); //經過answerid查找user Answer answer = answerDao.findAnswerById(answerid); //經過userid找user對象 //User user = userDao.finduserByIdReturnUser(answer.getUser().getId()); //得到answer下的user對象(持久化數據類型) User user = answer.getUser(); //由於是持久化類型對象,便可直接修改屬性,同步到數據庫 user.setCoin(user.getCoin()+paste.getOffer()); //解決問題 pasteDao.solvePasteByIdAndAnswerid(pasteid,answerid); } public AnswerDao getAnswerDao() { return answerDao; } public void setAnswerDao(AnswerDao answerDao) { this.answerDao = answerDao; } public UserDao getUserDao() { return userDao; } public void setUserDao(UserDao userDao) { this.userDao = userDao; } public Paste findPasteByIdReturnPaste(String pasteid) { //pasteDao.addPasteGlanceover(pasteid); //數據庫SQL語句:update paste set glanceover = glanceover+1 where id = ?; Paste paste = pasteDao.findPasteByIdReturnPaste(pasteid); paste.setGlanceover(paste.getGlanceover()+1); return paste; } public PageBean getGlanceoverPageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean glanceoverPageBean = new PageBean(currentPage, totalCount, 8); List<Paste> list = pasteDao.getGlanceoverPageList(); glanceoverPageBean.setList(list); return glanceoverPageBean; } public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum(); PageBean pageBean = new PageBean(currentPage,totalCount,8); List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize()); pageBean.setList(list); return pageBean; } public PasteDao getPasteDao() { return pasteDao; } public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) { this.pasteDao = pasteDao; } public void addPaste(Paste paste) { pasteDao.addPaste(paste); } public PageBean getAnsnumPageBean(Integer currentPage) { //得到全部的帖子數目 Integer totalCount = pasteDao.findAllPasteNum(); //建立PageBean PageBean ansnumPageBean = new PageBean(currentPage, totalCount, 8); //獲得List List<Paste> list = pasteDao.getAnsnumPageList(); //封裝List ansnumPageBean.setList(list); return ansnumPageBean; } }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置數據源 --> <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="jdbc:mysqL:///garyssh_forum"></property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="password" value="123456"></property> </bean> <!-- 配置sessionFactory --> <bean name="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="hibernate.show_sqp">true</prop> <prop key="hibernate.format_sql">true</prop> </props> </property> <property name="mappingDirectoryLocations" value="classpath:com/Gary/domain"></property> </bean> <!-- 配置事務的核心管理器 --> <bean name="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <!-- 通知 --> <tx:advice id="advice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" /> </tx:attributes> </tx:advice> <!-- 織入 --> <aop:config> <!-- 切入點 --> <aop:pointcut expression="execution(* com.Gary.service.*.*(..))" id="pc" /> <!-- 配置切面 切入點+通知 --> <aop:advisor advice-ref="advice" pointcut-ref="pc" /> </aop:config> <!-- 配置Action --> <bean name="userAction" class="com.Gary.web.UserAction" scope="prototype"> <property name="userService" ref="userService"></property> </bean> <bean name="pasteAction" class="com.Gary.web.PasteAction" scope="prototype"> <property name="pasteService" ref="pasteService"></property> <property name="answerService" ref="answerService"></property> </bean> <bean name="getDataAction" class="com.Gary.web.GetDataAction" scope="prototype"> <property name="pasteService" ref="pasteService"></property> <property name="userService" ref="userService"></property> </bean> <bean name="answerAction" class="com.Gary.web.AnswerAction" scope="prototype"> <property name="answerService" ref="answerService"></property> <property name="pasteService" ref="pasteService"></property> </bean> <!-- 配置Service --> <bean name="userService" class="com.Gary.service.UserService"> <property name="userDao" ref="userDao"></property> </bean> <bean name="pasteService" class="com.Gary.service.PasteService"> <property name="pasteDao" ref="pasteDao"></property> <property name="userDao" ref="userDao"></property> <property name="answerDao" ref="answerDao"></property> </bean> <bean name="answerService" class="com.Gary.service.AnswerService"> <property name="answerDao" ref="answerDao"></property> <property name="pasteDao" ref="pasteDao"></property> </bean> <!-- 配置Dao --> <bean name="userDao" class="com.Gary.dao.UserDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean name="pasteDao" class="com.Gary.dao.PasteDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> <bean name="answerDao" class="com.Gary.dao.AnswerDao"> <property name="sessionFactory" ref="sessionFactory"></property> </bean> </beans>