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