zoukankan      html  css  js  c++  java
  • 3.02-发布帖子

    数局访问层代码编写

    package com.nowcoder.community.dao;
    
    import com.nowcoder.community.entity.DiscussPost;
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.List;
    
    @Mapper
    public interface DiscussPostMapper {
    
        List<DiscussPost> selectDiscussPosts(int userId, int offset, int limit);
        // @Param注解用于给参数取别名,
        // 如果只有一个参数,并且在<if>里使用,则必须加别名.
        int selectDiscussPostRows(@Param("userId") int userId);
    
        int insertDiscussPost(DiscussPost discussPost);
    }
    

    discusspost-mapper.xml

        <insert id="insertDiscussPost" parameterType="DiscussPost">
            insert into discuss_post(<include refid="insertFields"></include>)
            values(#{userId},#{title},#{content},#{type},#{status},#{createTime},#{commentCount},#{score})
        </insert>    
    

    业务层service

    package com.nowcoder.community.service;
    
    import com.nowcoder.community.dao.DiscussPostMapper;
    import com.nowcoder.community.entity.DiscussPost;
    import com.nowcoder.community.util.SensitiveFilter;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    import org.springframework.web.util.HtmlUtils;
    
    import java.util.List;
    
    @Service
    public class DiscussPostService {
    
        @Autowired
        private DiscussPostMapper discussPostMapper;
    
        @Autowired
        private SensitiveFilter sensitiveFilter;
    
        public int addDiscussPost(DiscussPost post) {
            if (post == null) {
                throw new IllegalArgumentException("参数不能为空!");
            }
    
            // 转义HTML标记
            post.setTitle(HtmlUtils.htmlEscape(post.getTitle()));
            post.setContent(HtmlUtils.htmlEscape(post.getContent()));
            // 过滤敏感词
            post.setTitle(sensitiveFilter.filter(post.getTitle()));
            post.setContent(sensitiveFilter.filter(post.getContent()));
    
            return discussPostMapper.insertDiscussPost(post);
        }
    
    }

    controller

    package com.nowcoder.community.controller;
    
    import com.nowcoder.community.entity.DiscussPost;
    import com.nowcoder.community.entity.User;
    import com.nowcoder.community.service.DiscussPostService;
    import com.nowcoder.community.util.CommunityUtil;
    import com.nowcoder.community.util.HostHolder;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import java.util.Date;
    
    @Controller
    @RequestMapping("/discuss")
    public class DiscussPostController {
    
        @Autowired
        private DiscussPostService discussPostService;
    
        @Autowired
        private HostHolder hostHolder;
    
        @RequestMapping(path = "/add", method = RequestMethod.POST)
        @ResponseBody
        public String addDiscussPost(String title, String content) {
            User user = hostHolder.getUser();
            if (user == null) {
                return CommunityUtil.getJSONString(403, "你还没有登录哦!");
            }
    
            DiscussPost post = new DiscussPost();
            post.setUserId(user.getId());
            post.setTitle(title);
            post.setContent(content);
            post.setCreateTime(new Date());
            discussPostService.addDiscussPost(post);
    
            // 报错的情况,将来统一处理.
            return CommunityUtil.getJSONString(0, "发布成功!");
        }
    
    }
    

      

    页面(视图)

    index.html

    发布新帖按钮

    <button type="button" class="btn btn-primary btn-sm position-absolute rt-0" data-toggle="modal" data-target="#publishModal" th:if="${loginUser!=null}">我要发布</button>
    

      

    发布新帖表单

    <!-- 弹出框 -->
    <div class="modal fade" id="publishModal" tabindex="-1" role="dialog" aria-labelledby="publishModalLabel" aria-hidden="true">
    	<div class="modal-dialog modal-lg" role="document">
    		<div class="modal-content">
    			<div class="modal-header">
    				<h5 class="modal-title" id="publishModalLabel">新帖发布</h5>
    				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
    					<span aria-hidden="true">×</span>
    				</button>
    			</div>
    			<div class="modal-body">
    				<form>
    					<div class="form-group">
    						<label for="recipient-name" class="col-form-label">标题:</label>
    						<input type="text" class="form-control" id="recipient-name">
    					</div>
    					<div class="form-group">
    						<label for="message-text" class="col-form-label">正文:</label>
    						<textarea class="form-control" id="message-text" rows="15"></textarea>
    					</div>
    				</form>
    			</div>
    			<div class="modal-footer">
    				<button type="button" class="btn btn-secondary" data-dismiss="modal">取消</button>
    				<button type="button" class="btn btn-primary" id="publishBtn">发布</button>
    			</div>
    		</div>
    	</div>
    </div>
    <!-- 提示框 -->
    <div class="modal fade" id="hintModal" tabindex="-1" role="dialog" aria-labelledby="hintModalLabel" aria-hidden="true">
    	<div class="modal-dialog modal-lg" role="document">
    		<div class="modal-content">
    			<div class="modal-header">
    				<h5 class="modal-title" id="hintModalLabel">提示</h5>
    			</div>
    			<div class="modal-body" id="hintBody">
    				发布完毕!
    			</div>
    		</div>
    	</div>
    </div>  

    表单提交相关js代码

    index.js

    $(function(){
    	$("#publishBtn").click(publish);
    });
    
    function publish() {
    	$("#publishModal").modal("hide");
    
    	// 获取标题和内容
    	var title = $("#recipient-name").val();
    	var content = $("#message-text").val();
    	// 发送异步请求(POST)
    	$.post(
    	    CONTEXT_PATH + "/discuss/add",
    	    {"title":title,"content":content},
    	    function(data) {
    	        data = $.parseJSON(data);
    	        // 在提示框中显示返回消息
    	        $("#hintBody").text(data.msg);
    	        // 显示提示框
                $("#hintModal").modal("show");
                // 2秒后,自动隐藏提示框
                setTimeout(function(){
                    $("#hintModal").modal("hide");
                    // 刷新页面
                    if(data.code == 0) {
                        window.location.reload();
                    }
                }, 2000);
    	    }
    	);
    
    }
    

      

    测试效果

     数据表

    /*列信息*/-----------
    
    Field          Type          Collation        Null    Key     Default  Extra           Privileges                       Comment                        
    -------------  ------------  ---------------  ------  ------  -------  --------------  -------------------------------  -------------------------------
    id             int(11)       (NULL)           NO      PRI     (NULL)   auto_increment  select,insert,update,references                                 
    user_id        varchar(45)   utf8_general_ci  YES     MUL     (NULL)                   select,insert,update,references                                 
    title          varchar(100)  utf8_general_ci  YES             (NULL)                   select,insert,update,references                                 
    content        text          utf8_general_ci  YES             (NULL)                   select,insert,update,references                                 
    type           int(11)       (NULL)           YES             (NULL)                   select,insert,update,references  0-普通; 1-置顶;            
    status         int(11)       (NULL)           YES             (NULL)                   select,insert,update,references  0-正常; 1-精华; 2-拉黑;  
    create_time    timestamp     (NULL)           YES             (NULL)                   select,insert,update,references                                 
    comment_count  int(11)       (NULL)           YES             (NULL)                   select,insert,update,references                                 
    score          double        (NULL)           YES             (NULL)                   select,insert,update,references 
    

      

    /*索引信息*/--------------
    
    Table         Non_unique  Key_name       Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null    Index_type  Comment  Index_comment  
    ------------  ----------  -------------  ------------  -----------  ---------  -----------  --------  ------  ------  ----------  -------  ---------------
    discuss_post           0  PRIMARY                   1  id           A                    1    (NULL)  (NULL)          BTREE                               
    discuss_post           1  index_user_id             1  user_id      A                    1    (NULL)  (NULL)  YES     BTREE                               
    

      

  • 相关阅读:
    一般处理程序页ashx 序列化 Json数组
    SQL server 分页
    MySQL 分页
    获取网站的BaseURL
    java学习书籍推荐
    查询并关闭指定端口进程
    ettercap使用
    MS10-046漏洞利用
    MS12-020漏洞利用
    入侵安卓手机
  • 原文地址:https://www.cnblogs.com/lpzh/p/12544452.html
Copyright © 2011-2022 走看看