JavaWeb_(SSH论坛)_五、帖子模块
基于SSH框架的小型论坛项目
一、项目入门 传送门
二、框架整合 传送门
三、用户模块 传送门
四、页面显示 传送门
五、帖子模块 传送门
六、点赞模块 传送门
七、辅助模块 传送门
回复帖子
分析回复帖子
拿到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>
detail.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;
- }
- }
PasteAction.java
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;
- }
- }
PasteService.java
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;
- }
- }
PasteDao.java
帖子模块前端页面
- <%@ 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>
detail.jsp
当浏览一个帖子时,帖子的浏览数目需要+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;
- }
- }
PasteService.java
- 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();
- }
- }
PasteDao.java
为了尽可能少的访问数据,利用数据持久状态
- 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;
- }
- }
GetDataAction.java
- 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;
- }
- }
PasteAction.java
前端页面
- <%@ 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>
detail.jsp
分析回复帖子模块
创建回复帖子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;
- }
- }
Answer.java
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;
- }
- }
AnswerAction.java
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);
- }
- }
AnswerService.java
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);
- }
- }
AnswerDao.java
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>
Answer.hbm.xml
- <?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>
Paste.hbm.xml
- <?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>
Answer.hbm.xml
此时点击提交回答按钮后表单无法发送问题!!!
修改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>
detail.jsp
测试登陆用户发帖模块
- <%@ 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>
detail.jsp
此时发现跳转过来的页面全部问题、最近热帖、最近热议、专家排行榜都是空的白的,接下来需要实现重定向到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;
- }
- }
AnswerAction.java
- <?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>
struts.xml
查看所有回复
分析查看回复
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;
- }
- }
PasteAction.java
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);
- }
- }
AnswerService.java
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;
- }
- }
AnswerDao.java
前端样式的美化
- <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>
detail.jsp
删除与采纳的显示
判断当前回复帖子人是登陆名自己的,显示可以删除帖子
- <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>
detail.jsp
分析删除回复
删除和采纳
- <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>
detail.jsp
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;
- }
- }
AnswerAction.java
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;
- }
- }
AnswerService.java
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);
- }
- }
AnswerDao.java
可以看到,进入帖子后,帖子浏览数目+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>
detail.jsp
实现采纳问题
- <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;
- }
- }
AnswerService.java
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;
- }
- }
AnswerDao.java
发现当采纳问题后,应该隐藏其它问题的采纳按钮,已采纳的问题也不可删除
- <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;
- }
- }
AnswerDao.java
- <?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>
applicationContext.xml
JavaWeb_(SSH论坛)_五、帖子模块的更多相关文章
- JavaWeb_(SSH论坛)_七、辅助模块
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 为避免代码冗余, ...
- JavaWeb_(SSH论坛)_六、点赞模块
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 联合主键 创建p ...
- JavaWeb_(SSH论坛)_三、用户模块
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 User表 id ...
- JavaWeb_(SSH论坛)_一、项目入门
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 项目已上传至gi ...
- JavaWeb_(SSH论坛)_四、页面显示
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 帖子表与回复表 ...
- JavaWeb_(SSH论坛)_二、框架整合
基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 导入Jar包 导 ...
- JavaWeb_(Mybatis框架)输入和输出参数_五
系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...
- discuz 帖子模块用到的表及自动发帖函数
最近在做一个discuz的插件,由于需要程序自动生成并调用discuz已经存在插件的帖子.然而这就相当于自动发帖的功能了.网上找了一下,大部分都是通过curl模拟登陆,模拟发帖的,这显然不满足我的要求 ...
- python爬虫主要就是五个模块:爬虫启动入口模块,URL管理器存放已经爬虫的URL和待爬虫URL列表,html下载器,html解析器,html输出器 同时可以掌握到urllib2的使用、bs4(BeautifulSoup)页面解析器、re正则表达式、urlparse、python基础知识回顾(set集合操作)等相关内容。
本次python爬虫百步百科,里面详细分析了爬虫的步骤,对每一步代码都有详细的注释说明,可通过本案例掌握python爬虫的特点: 1.爬虫调度入口(crawler_main.py) # coding: ...
随机推荐
- Java回调实现异步
在正常的业务中使用同步线程,如果服务器每处理一个请求,就创建一个线程的话,会对服务器的资源造成浪费.因为这些线程可能会浪费时间在等待网络传输,等待数据库连接等其他事情上,真正处理业务逻辑的时间很短很短 ...
- 多表表与表关系 增删改查 admin
今日内容 多表表与表关系 增删改查表数据 admin 多表操作 表与表关系 默认指向主键 可能是隐藏主键 djamgo1.1默认级联(models. SET NULL解除级联) 一对一 先建立少的一方 ...
- Java Web开发技术教程入门-JavaBean组件与Servlet
补更:阅战阅勇第7/8/9Days笔记 昨天我们了解了JDBC技术的一些日常操作,对于数据库而言,不仅仅的只有"增,删,改,查".博主觉得最重要的是SQL语句的优化,一个" ...
- Codeforces 1196F. K-th Path
传送门 发现到 $K$ 不大,考虑有什么和 $K$ 有关的结论 发现答案似乎只会经过前 $K$ 小的边,如果边权第 $K$ 小的边有多条那么可以任意取 证明挺显然的吧,首先如果走了边权排名大于 $K$ ...
- 使用jdbc操作ClickHouse
使用jdbc操作ClickHouse 2018年07月01日 01:33:00 狮子头儿 阅读数 10501 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处 ...
- eclipse+maven搭建springboot项目入门
一.下载jdk,例如(jdk1.8.171) 安装(注意仅仅安装jdk就可以了,不要安装jre,设置JAVA_HOME,配置jdk环境变量) 二.下载maven(apache-maven-3.5.3- ...
- sql server len函数
len函数 --返回字符表达式中的字符数 --如果字符串中包含前导空格和尾随空格,则函数将它们包含在内 --LEN对相同的单字节和双字节字符串返回相同的值 --示例:select LEN('no'), ...
- golang(2):基本数据类型和操作符
1). 文件名 & 关键字 & 标识符 . 所有go源码都以 .go 结尾 . 标识符以字母或下划线开头,大小写敏感 . _ 是特殊标识符,用来忽略结果 . 保留关键字 golang ...
- 关于记录log日志的几种方法
最近在记录日志的时候总结了几种方式: 1.使用log4j2记录 2.使用log4j记录 3.使用logback配置,记录前使用 private final Logger logger = Logge ...
- chrome 浏览器安装 postman
chrome 浏览器安装 postman(插件下载见文章末尾) 1.安装方法 将下载的crx插件拖拽到chrome浏览器即可安装成功. 2.特殊情况 问题: chrome73版本后拖拽安装chrome ...