zoukankan      html  css  js  c++  java
  • 5_2_发布资讯

    发布资讯

    一 需求描述

    1 点击分享,可以分部咨询news。一条news包括图片,资讯标题,资讯链接;

     

    2. 资讯发布完会跳到首页home.html:

     

    3 点击具体资讯可以查看资讯详情页detail.html,并进行评论 : 

     

     

    二 具体代码实现:

    1 DB设计:

      DROP TABLE IF EXISTS `news`;
      CREATE TABLE `news` (
        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
        `title` varchar(128) NOT NULL DEFAULT '',
        `link` varchar(256) NOT NULL DEFAULT '',
        `image` varchar(256) NOT NULL DEFAULT '',
        `like_count` int NOT NULL,
        `comment_count` int NOT NULL,
        `created_date` datetime NOT NULL,
        `user_id` int(11) NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    View Code

    2 Model: News.java

    package com.nowcoder.model;
    
    import java.util.Date;
    
    /**
     * Created by rainday on 16/6/30.
     */
    public class News {
    
      private int id;
    
      private String title;
    
      private String link;
    
      private String image;
    
      private int likeCount;
    
      private int commentCount;
    
      private Date createdDate;
    
      private int userId;
    
      public int getId() {
        return id;
      }
    
      public void setId(int id) {
        this.id = id;
      }
    
      public String getTitle() {
        return title;
      }
    
      public void setTitle(String title) {
        this.title = title;
      }
    
      public String getLink() {
        return link;
      }
    
      public void setLink(String link) {
        this.link = link;
      }
    
      public String getImage() {
        return image;
      }
    
      public void setImage(String image) {
        this.image = image;
      }
    
      public int getLikeCount() {
        return likeCount;
      }
    
      public void setLikeCount(int likeCount) {
        this.likeCount = likeCount;
      }
    
      public int getCommentCount() {
        return commentCount;
      }
    
      public void setCommentCount(int commentCount) {
        this.commentCount = commentCount;
      }
    
      public Date getCreatedDate() {
        return createdDate;
      }
    
      public void setCreatedDate(Date createdDate) {
        this.createdDate = createdDate;
      }
    
      public int getUserId() {
        return userId;
      }
    
      public void setUserId(int userId) {
        this.userId = userId;
      }
    }
    View Code

    3 Dao:

    int addNews(News news);   发布资讯

    News selectById(int id);  点击详情页时根据newsId查询资讯

    int updateCommentCount(@Param("id") int id, @Param("commentCount") int commentCount);   资讯详情页时改评论数量

    List<News> selectByUserIdAndOffset(@Param("userId") int userId,
    @Param("offset") int offset,
    @Param("limit") int limit); 点击具体用户头像可查询该用户发布的所有资讯。
    package com.nowcoder.dao;
    
    import com.nowcoder.model.News;
    import org.apache.ibatis.annotations.*;
    
    import java.util.List;
    
    /**
     * Created by Administrator on 2017/4/6.
     */
    @Mapper
    public interface NewsDao {
    
        String TABLE_NAME = "news";
        String INSERT_FIELDS = "title, link, image, like_count, comment_count," +
                "created_date, user_id";
        String SELECT_FIELDS = "id," + INSERT_FIELDS;
    
        @Insert({"insert into ", TABLE_NAME, "(", INSERT_FIELDS ,") " +
                " values(#{title}," +
                " #{link}, " +
                "#{image}, " +
                "#{likeCount}," +
                "#{commentCount}," +
                "#{createdDate}," +
                "#{userId})"})
        int addNews(News news);
    
        @Select({"select", SELECT_FIELDS, "from", TABLE_NAME, " where id = #{id}"})
        News selectById(int id);
    
        @Update({"update", TABLE_NAME, "set comment_count=#{commentCount} where id=#{id}"})
        int updateCommentCount(@Param("id") int id, @Param("commentCount") int commentCount);
    
        List<News> selectByUserIdAndOffset(@Param("userId") int userId,
                                           @Param("offset") int offset,
                                           @Param("limit") int limit);
    
    }
    View Code
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.nowcoder.dao.NewsDao">
    
        <sql id="table">news</sql>
        <sql id="selectFields">
          id,title,link,image,like_count,comment_count,created_date,user_id
        </sql>
    
        <select id="selectByUserIdAndOffset" resultType="com.nowcoder.model.News">
            SELECT
            <include refid="selectFields"/>
            FROM
            <include refid="table"/>
            <if test="userId != 0">
              WHERE user_id = #{userId}
            </if>
    
            ORDER BY id DESC
            LIMIT #{offset}, #{limit}
    
        </select>
    
    
    
    
    
    
    </mapper>
    View Code

    4 Service:

    package com.nowcoder.service;
    
    import com.nowcoder.dao.NewsDao;
    import com.nowcoder.dao.UserDao;
    import com.nowcoder.model.News;
    import com.nowcoder.model.User;
    import com.nowcoder.util.ToutiaoUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.IOException;
    import java.nio.file.Files;
    import java.nio.file.StandardCopyOption;
    import java.util.List;
    import java.util.UUID;
    
    /**
     * Created by Administrator on 2017/4/8.
     */
    @Service
    public class NewsService {
    
        @Autowired
        NewsDao newsDao;
    
        public List<News> getLatestNews(int userId, int offset, int limit){
            return newsDao.selectByUserIdAndOffset(userId, offset, limit);
        }
    
        public News getById(int newsId){
            return newsDao.selectById(newsId);
        }
    
        public int addNews(News news){
            newsDao.addNews(news);
            return news.getId();
        }
    
        public int updateCommentCount(int newsId, int commentCount){
            return newsDao.updateCommentCount(newsId, commentCount);
        }
    }
    View Code

    5 Controller :

    (1)发布资讯:

    /**
         * 点击分享,分享头条
         * @param image 分享内容的图片
         * @param title 分享内容标题
         * @param link 分享内容链接
         * @return
         */
        @RequestMapping(path = {"/user/addNews/"}, method = {RequestMethod.POST})
        @ResponseBody
        public String addNews(@RequestParam("image") String image,
                              @RequestParam("title") String title,
                              @RequestParam("link") String link){
    
            try {
                News news = new News();
                if(hostHolder.getUser() != null){
                    news.setUserId(hostHolder.getUser().getId());
                }else {
                    //设置一个匿名用户
                    news.setUserId(3);
                }
                news.setCreatedDate(new Date());
                news.setLink(link);
                news.setImage(image);
                news.setTitle(title);
    
                newsService.addNews(news);
                return ToutiaoUtil.getJSONString(0);
            }catch (Exception ex){
                logger.error("资讯发布失败:" + ex.getMessage());
                return ToutiaoUtil.getJSONString(1, "资讯发布失败");
            }
    
        }

     

    (2)查看资讯详情页:

      /**
         * 查看资讯详情页
         * @param newsId
         * @param model
         * @return
         */
        @RequestMapping(path = {"/news/{newsId}"}, method = {RequestMethod.GET})
        public String newsDetail(@PathVariable("newsId") int newsId, Model model){
            News news = newsService.getById(newsId);
            //显示评论内容
            if(news != null){
                List<Comment> commentList = commentService.getCommentsByEntity(news.getId(), EntityType.ENTITY_NEWS);
                List<ViewObject> commentVOs = new ArrayList<>();
                for(Comment comment : commentList){
                    ViewObject vo = new ViewObject();
                    vo.set("comment", comment);
                    vo.set("user", userService.getUser(comment.getUserId()));
                    commentVOs.add(vo);
                }
                model.addAttribute("comments", commentVOs);
            }
    
            //评论
            model.addAttribute("news", news);
            model.addAttribute("owner", userService.getUser(news.getUserId()));
            return "detail";
        }

    detail.html:

    #parse("header.html")
    <div id="main">
        <div class="container">
            <div class="post detail">
    
                <div class="votebar">
                    #if($like>0)
                    <button class="click-like up pressed" data-id="$!{news.id}" title="赞同"><i class="vote-arrow"></i><span class="count">$!{news.likeCount}</span></button>
                    #else
                    <button class="click-like up" data-id="$!{news.id}" title="赞同"><i class="vote-arrow"></i><span class="count">$!{news.likeCount}</span></button>
                    #end
                    #if($like<0)
                    <button class="click-dislike down pressed" data-id="$!{news.id}" title="反对"><i class="vote-arrow"></i></button>
                    #else
                    <button class="click-dislike down" data-id="$!{news.id}" title="反对"><i class="vote-arrow"></i></button>
                    #end
                </div>
    
                <div class="content">
                    <div class="content-img">
                        <img src="$!{news.image}?imageView2/2/w/100" alt="">
                    </div>
                    <div class="content-main">
                        <h3 class="title">
                            <a target="_blank" rel="external nofollow" href="$!{news.link}">$!{news.title}</a>
                        </h3>
                        <div class="meta">
                            $!{news.link}
                                  <span>
                                      <i class="fa icon-comment"></i> $!{news.commentCount}
                                  </span>
                        </div>
                    </div>
                </div>
                <div class="user-info">
                    <div class="user-avatar">
                        <a href="/user/$!{owner.id}"><img width="32" class="img-circle" src="$!{owner.headUrl}"></a>
                    </div>
    
                </div>
    
                <div class="subject-name">来自 <a href="/user/$!{owner.id}">$!{owner.name}</a></div>
            </div>
    
    
            <div class="post-comment-form">
                #if($user)
                <span>评论 ($!{news.commentCount})</span>
                <form method="post" action="/addComment">
                    <input name="newsId" type="hidden" value="$!{news.id}">
    
                    <div class="form-group text required comment_content">
                        <label class="text required sr-only">
                            <abbr title="required">*</abbr> 评论</label>
                        <textarea rows="5" class="text required comment-content form-control" name="content" id="content"></textarea>
                    </div>
                    <div class="text-right">
                        <input type="submit" name="commit" value="提 交" class="btn btn-default btn-info">
                    </div>
                </form>
                #else
                <div class="login-actions">
                    <a class="btn btn-success" href="/?pop=1">登录后评论</a>
                </div>
                #end
            </div>
    
            <div id="comments" class="comments">
                #foreach($commentvo in $comments)
                <div class="media">
                    <a class="media-left" href="/user/$!{commentvo.user.id}">
                        <img src="$!{commentvo.user.headUrl}">
                    </a>
                    <div class="media-body">
                        <h4 class="media-heading">
                            <small class="date">$date.format('yyyy-MM-dd HH:mm:ss', $!{commentvo.comment.createdDate})
                            </small>
                        </h4>
                        <div>$!{commentvo.comment.content}</div>
                    </div>
                </div>
                #end
            </div>
    
        </div>
        <script type="text/javascript">
              $(function(){
    
                // If really is weixin
                $(document).on('WeixinJSBridgeReady', function() {
    
                  $('.weixin-qrcode-dropdown').show();
    
                  var options = {
                    "img_url": "",
                    "link": "http://nowcoder.com/j/wt2rwy",
                    "desc": "",
                    "title": "读《Web 全栈工程师的自我修养》"
                  };
    
                  WeixinJSBridge.on('menu:share:appmessage', function (argv){
                    WeixinJSBridge.invoke('sendAppMessage', options, function (res) {
                      // _report('send_msg', res.err_msg)
                    });
                  });
    
                  WeixinJSBridge.on('menu:share:timeline', function (argv) {
                    WeixinJSBridge.invoke('shareTimeline', options, function (res) {
                      // _report('send_msg', res.err_msg)
                    });
                  });
    
                  // $(window).on('touchmove scroll', function() {
                  //   if ((window.innerHeight + window.scrollY) >= document.body.offsetHeight) {
                  //     $('div.backdrop').show();
                  //     $('div.share-help').show();
                  //   } else {
                  //     $('div.backdrop').hide();
                  //     $('div.share-help').hide();
                  //   }
                  // });
    
                });
    
              })
    
        </script>
        <script type="text/javascript" src="/scripts/main/site/detail.js"></script>
    </div>
    #parse("footer.html")

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    Distribution of Data Through OCAF Tree
    OpenCASCADE Application Framework Data Framework Services
    OpenCascade Application Framework Introduction
    被限制的加法(高精入门)
    凝视
    第二题
    图论3 二分图匹配
    图论2 最近公共祖先LCA
    图论1 Tarjan算法
    最小生成树
  • 原文地址:https://www.cnblogs.com/noaman/p/6790060.html
Copyright © 2011-2022 走看看