【手把手】JavaWeb 入門級項目實戰 -- 文章發布系統 (第十二節)


好的,那么在上一節中呢,評論功能的后台已經寫好了,這一節,先把這部分后台代碼和前台對接一下。

1.評論功能實現

我們修改一下保存評論按鈕的點擊事件,用jQuery的方式獲取文本框中的值,然后通過ajax方法,把數據傳遞到CommentController.jsp,jsp就是Servlet,這樣寫就和傳遞到Servlet是差不多的意思。

detail.jsp

代碼:

$(".button").eq(0).on('click',function(){
    var txt = $('#commenttxt').val();
    $.post("${basePath}/controller/CommentController.jsp",{txt : txt},function(data){
        data = data.trim();
        if(data == '-1'){
            alert('請先登錄!');
        }
    });
});

我們采用{},也就是JSON的方式,將數據包裹一下,傳遞過去。

在JSP頁面是這樣接收的:

<%@page import="bean.User"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    //因為評論是需要登陸的,如果沒有登陸我們就調整到登陸頁面去 
    User user = (User)session.getAttribute("user");
    if(user==null){//代表用戶沒有登陸
        out.print("-1");
        return;
    }
    String txt = request.getParameter("txt").toString();
    System.out.println(txt);
%>

它只是一種寫法而已,如果在Servlet中,你是不是還要在doGet或者doPost方法中傳遞一個 HttpServletRequest request 參數呢?而當我們采用JSP的話呢,就不需要這么做了,這就是九大隱式對象的好處。

我們通過

request.getParameter("txt").toString();

的方式,先獲取到前台傳過來的評論信息,並且用一個String數據類型的txt ,保存下來。

接着,先不急着往下寫,你可以先打印出來看看,看看它能不能取到,如果這都不能取到,就說明某個地方已經錯了,再寫下去也沒有意義。

我們隨便寫一個什么東西,點擊保存評論。

控制台成功打印出來了,這說明代碼沒問題。

OK,繼續,接下來,我們就需要把這個信息保存到數據庫里了。

在調用CommentService之前,我們先看一下要保存哪些東西。(這些信息去CommentService里面看,之前寫過一個saveComment方法)

保存信息的清單:

id,user_id,content,article_id,create_time,is_delete

id自然不用多說,我們采用UUID就行了。user_id是用戶ID,就是當前登錄的那個人。content的話,就是評論的內容,也就是我們剛剛取到的txt。article_id是文章的id,到時候加載評論的時候,肯定就是通過這個字段來查找的。create_time是創建日期,is_delete為是否刪除,我們默認給他一個0,表示不刪除。

好的,這些東西確認好了,就開始寫代碼吧。

通過以上的分析,我們是不是還要把文章ID從前台傳過來呢?好的,說干就干。

回到detail.jsp,給點擊事件中的JSON對象添加一個屬性,把文章ID拿到:

$(".button").eq(0).on('click',function(){
    var txt = $('#commenttxt').val();
    $.post("${basePath}/controller/CommentController.jsp",{txt : txt , articleId : "${article.id}"},function(data){
        data = data.trim();
        if(data == '-1'){
            alert('請先登錄!');
        }
    });
});

修改后的CommentController

<%@page import="bean.User"%>
<%@page import="bean.Comment"%>
<%@page import="service.CommentService"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
    User user = (User)session.getAttribute("user");
    if(user==null){//代表用戶沒有登陸
        out.print("-1");
        return;
    }
    String txt = request.getParameter("txt").toString();
    String articleId = request.getParameter("articleId").toString();
     
    CommentService commentService = new CommentService();
    Comment comment = new Comment();
    comment.setId(UUID.randomUUID().toString());
    comment.setUserId(user.getId());
    comment.setArticleId(articleId);
    comment.setContent(txt);
    commentService.saveComment(comment);
     
     
%>

測試:

哎喲不錯哦~~ 貌似木有問題。

再看看數據庫。

哎呀呀,真的有了!

那么這是不是就說明,評論功能到目前都是正確的?

接下來,我們是不是還應該給用戶一點反饋表示評論已經成功保存了?

我們在CommentController里面,最后再加上返回一個標志位 1 即可。

out.print("1");
然后前台判斷,如果返回的是1,那么就提示“保存成功!”

$(".button").eq(0).on('click',function(){
    var txt = $('#commenttxt').val();
    $.post("${basePath}/controller/CommentController.jsp",{txt : txt , articleId : "${article.id}"},function(data){
        data = data.trim();
        if(data == '-1'){
            alert('請先登錄!');
        }else if(data == '1'){
            alert('保存成功!');
        }
    });
});

這樣不就好了嗎?O(∩_∩)O~~

2.評論加載

評論保存已經沒問題了,接下來就是加載。

回到detail.jsp頁面,第一步,是不是要導包啊?

<%@ page language="java" import="service.CommentService"%>

第二步,就是獲取CommentService的實例對象。然后把我們需要的評論都查詢出來。(因為之前查詢文章內容的時候,已經獲取到id了,所以這里不再獲取)

<%
    CommentService commentService = new CommentService();
    List<Map<String,Object>> list = commentService.getCommentsByArticleId(id);
    pageContext.setAttribute("comments", list);
    System.out.println(list);
%>

測試,刷新一下頁面,要是不起作用的話呢,就重啟一下tomcat。

控制台成功打印出了信息:

[{content=OK, username=zhangsan}, {content=很不錯的文章,贊一個!, username=zhangsan}]

接下來,就是如何把這些數據貼到頁面上的問題了。

怎么貼呢,是不是還要循環一下?

<div class='mb64' class="comment_list">
    <c:forEach items="${comments}" var="comment">
        <div class="comment_infor clearfix">
            <div style='border-bottom:1px solid #ccc' class="comment_word">
                 <p style='border-bottom:20px solid #fff'>${comment.username}說:</p>
                 <p class='mb32'>${comment.content}</p>
             </div>
        </div>
     </c:forEach>
</div>

這樣就行了,刷新:

樣式稍微有點問題,稍微調一下:

.comment_word {
    margin-top:16px;
}

這樣好些了。

最后,當提示保存成功的時候,順便把頁面刷新一下,這樣方便我們直接看到效果:

本文結束...

最近事情太多,一方面項目工期加緊,空余時間越來越少。另一方面,我自己的個人網站-小兔博客剛剛起步,一大堆BUG要調整,真的有些分身乏術的感覺。

這個系列,到這一節,一共寫了12章,雖然不夠完整,但是基本的前后台已經有了。我想,對於新人而言,還是有一定的借鑒意義的。我發現之前的這段日子里,自己開坑無數,卻都不系統,所以,我打算在今后的文章中,做一個系統的歸類,否則的話顯得有些雜亂。

這個系列,這應該算是最后一章,沒法子,個人精力有限,不可能真的把一個完完整整的網站做出來,配上博客講解,那樣的話工作量實在太大。不過這個系列我還是傾注了很多心血的,一路上,也感謝你們的陪伴,這個小網站也是在諸位的眼皮子底下一步一步成長起來的。最后,還是非常感謝大家的陪伴。好的,那么這個系列到此為止,結束了。

小兔博客:http://www.xiaotublog.com/
文章發布系統demo(雛形):http://www.xiaotublog.com:8088/Article/ (測試用戶:zhangsan/123456)
技術文章搜索(簡書、博客園):http://www.xiaotublog.com/search.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM