JavaWeb個人播客項目:手把手教你實現博客後臺系統之編輯博文9(完結篇!!!)

建議從未看過的人從第三篇博文開始看:https://blog.csdn.net/DaiYuMeng/article/details/104677362

如果你還不瞭解其數據傳送的過程,請閱讀:https://blog.csdn.net/DaiYuMeng/article/details/104698898


當初編輯博文模塊是我耗時頗多的一個模塊,稱得上重點模塊,就此與大家分享我遇到過的問題及解決方法=3=

 一、界面

 


二、問題集錦

2.1 layui模擬select點擊事件(二級聯動)

(1)佈局


(2)獲取一級分類



(3)獲取之前選中的分類


(4)設置一個定時器以模擬select點擊的效果,同時默認選中上一次選擇的分類



(5)調用form.on()方法,使得一級分類出現聯動效果

(PS.③通過for循環動態爲二級分類的select添加選項,少打了一個字...)


2.2 富文本編輯器自動格式轉換渲染數據(如<b>你</b>,顯示加粗的 你)

(1)獲取後臺傳過來的數據


(2)初始化富文本編輯器,並利用其自帶的ue.setContent()方法進行賦值


 2.3標籤欄自動選中默認值

(1)設置ajax的加載方式爲非異步


(2)佈局


(3)給select下拉框添加選項



(4)默認選中上一次選擇的



三、代碼

edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="../base.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>編輯博文</title>
<%
	int article_id = (int) request.getAttribute("article_id");
	String article_content = (String) request.getAttribute("article_content");
	String article_desc = (String) request.getAttribute("article_desc");
	String article_image = (String) request.getAttribute("article_image");
	int article_isTop = (int) request.getAttribute("article_isTop");
	String article_title = (String) request.getAttribute("article_title");
	String category_name = (String) request.getAttribute("category_name");
	int tag1 = (int) request.getAttribute("tag1");
	int tag2 = (int) request.getAttribute("tag2");
	int tag3 = (int) request.getAttribute("tag3");
	String parent_name = (String) request.getAttribute("parent_name");
%>
<style type="text/css">
#box {
	width: 1000px;
	margin-left: auto;
	margin-right: auto;
	/*background-image: url(../css/image/18.gif);  */
	padding: 20px;
	opacity: 0.8;
}

.layui-form-select dl {
	z-index: 1999;
}
</style>
</head>
<body>
	<div id="box">
		<input value="<%=article_id%>" hidden="hidden" id="tid"> <input
			value="<%=tag1%>" hidden="hidden" id="tag_1"> <input
			value="<%=tag2%>" hidden="hidden" id="tag_2"> <input
			value="<%=tag3%>" hidden="hidden" id="tag_3"> <input
			value="<%=article_isTop%>" hidden="hidden" id="article_isTop">

		<form class="layui-form" action="" enctype="multipart/form-data"
			id="myform">
			<h3
				style="text-align: center; margin-bottom: 20px; text-shadow: 1px 1px 2px red;">編輯博文</h3>
			<div class="layui-form-item">
				<label class="layui-form-label">文章標題</label>
				<div class="layui-input-block" style="width: 420px;">
					<input type="text" name="title" required lay-verify="required"
						placeholder="請輸入標題" autocomplete="off" class="layui-input"
						id="article_title" value=<%=article_title%>>
				</div>
			</div>

			<div class="layui-form-item" style="z-index: 1999px;">
				<label class="layui-form-label">文章分類</label>
				<div class="layui-input-inline" style="width: 180px;">
					<select name="first_category" lay-verify="required"
						id="first_category" lay-filter="myFirstSelect">
						<option value=""></option>
					</select>
				</div>
				<div class="layui-input-inline" style="width: 180px;">
					<select name="second_category" lay-verify="required"
						id="second_category" lay-filter="mySecondSelect">
					</select>
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">置頂</label>
				<div class="layui-input-block">
					<input type="radio" name="isTop" value="是" title="是" id="isT">
					<input type="radio" name="isTop" value="否" title="否" checked>
				</div>
			</div>
			<div class="layui-form-item">
				<div class="layui-input-block">
					<!-- 在這裏放一個img標籤 默認不顯示 -->
					<button type="button" class="layui-btn" id="test1">
						<i class="layui-icon">&#xe67c;</i>上傳封面圖
					</button>
					<!--  style="display:none;" -->
					<div style="height: 20px; width: 100%;"></div>
					<img id="article_image" class="article_image"
						src="<%=article_image%>"
						style="margin-top: 20px; width: 135px; height: 180px;"></img>
				</div>
			</div>
			<div style="display: none;">
				<input type="hidden" name="article_title" id="content"
					value="<%=article_content%>" />
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">文章內容</label>
				<div class="layui-input-block">
					<div id="editor" name="article_content"
						style="width: 900px; height: 400px;"></div>
				</div>
			</div>
			<div class="layui-form-item">
				<label class="layui-form-label">標籤</label>
				<div class="layui-input-inline" style="width: 150px;">
					<select name="tag1" id="tag1" lay-verify="" lay-search>
					</select>
				</div>
				<div class="layui-input-inline" style="width: 150px;">
					<select name="tag2" id="tag2" lay-verify="" lay-search>
						<option id="0">可不選</option>
					</select>
				</div>
				<div class="layui-input-inline" style="width: 150px;">
					<select name="tag3" id="tag3" lay-verify="" lay-search>
						<option id="0">可不選</option>
					</select>
				</div>
			</div>
			<div class="layui-form-item layui-form-text">
				<label class="layui-form-label">博文簡介</label>
				<div class="layui-input-block">
					<textarea placeholder="請輸入內容" class="layui-textarea"
						id="article_desc"></textarea>
				</div>
			</div>
			<div class="layui-form-item" style="margin-top: 50px;">
				<div class="layui-input-block">
					<button class="layui-btn" type="button" lay-submit
						lay-filter="formDemo">立即提交</button>
					<button type="reset" class="layui-btn layui-btn-primary"
						style="margin-left: 12%;">重置</button>
				</div>
			</div>
		</form>


	</div>
</body>
<script>
	function getFirstCategory() {
		$("#article_desc").val("<%=article_desc%>");
		$.post("${ctx}/getFirstCategory", {}, function(result) {
			with (result) {
				for (var i = 0; i < data.length; i++) {
					var option = "<option id="+data[i].category_id+">"
							+ data[i].category_name + "</option>";
					$("#first_category").append(option);
					layui.form.render('select');
				}
			}		

		}, "json");
		$.ajaxSetup({
			cache : false
		});
	}
	function getFirstTag() {
		$.post("${ctx}/getFirstTag", {}, function(result) {
			with (result) {
				for (var i = 0; i < data.length; i++) {
					var option = "<option id="+data[i].tag_id+">"
							+ data[i].tag_name + "</option>";
					$("#tag1").append(option);
					$("#tag2").append(option);
					$("#tag3").append(option);
					layui.form.render('select');
				}
			}
		}, "json");
		$.ajaxSetup({
			cache : false
		});
	}
 	function getSelectedCategory(){		
 		setTimeout(function () {
 			  $('select[name="first_category"]').next().find('.layui-anim').children('dd[lay-value="<%=parent_name%>"]').click();
 			  $('select[name="second_category"]').next().find('.layui-anim').children('dd[lay-value="<%=category_name%>"]').click();
 	           
		},500);
		 layui.form.render('select');
	} 
	function getSelectedTag(){
		//遍歷 將某個置爲選中狀態
		$('#tag1 option').each(function(){
			 if($(this).attr('id')==<%=tag1%>){
				$(this).attr("selected",true);
			}
		});
		$('#tag2 option').each(function(){
			if($(this).attr('id')==<%=tag2%>){
				$(this).attr("selected",true);
			}
		});
		$('#tag3 option').each(function(){
			if($(this).attr('id')==<%=tag3%>){
				$(this).attr("selected",true);
			}
		});
		layui.form.render('select');
	}
	//獲取默認的狀態
	function getSelectedState(){
		//alert(1);
		var article_isTop =$("#article_isTop").val();
		if(article_isTop!=0){
			//alert(111111);
			$("#isT").attr("checked",true);
			layui.form.render();
		}
	}
	layui.use('form', function() {
		//就是這行代碼  搞定了tag默認選中非要選擇的
		 $.ajaxSettings.async = false; 
		//1.初始化form表單
		var form = layui.form;
		//2.初始化富文本編輯器
		var ue = window.UE.getEditor('editor');
		ue.ready(function(){
			//alert($("#content").val());
			ue.setContent('<%=article_content%>');
		});
		//3.獲得一級分類
		getFirstCategory();
		//補充之獲得一級標籤(最少選擇一個,最多選擇三個)
		getFirstTag();
		getSelectedTag();
		getSelectedCategory();
		getSelectedState();
		//4.獲得二級分類
		form.on('select(myFirstSelect)', function(data2) {
			data2 = $("#first_category :selected").attr("id");
			$.post("${ctx}/getSecondCatgegory", {
				parent_id : data2
			}, function(result) {
				with (result) {
					$("#second_category").html("");
					for (var i = 0; i < data.length; i++) {
						var option = "<option id="+data[i].category_id+">"
								+ data[i].category_name + "</option>";
						$("#second_category").append(option);
						layui.form.render('select');
					}
				}

			}, "json");
			$.ajaxSetup({
				cache : false
			});
			layui.form.render('select');
		});

		//監聽提交
		form.on('submit(formDemo)', function(data) {
			var tag_id1 = $("#tag1 :selected").attr("id");
			var tag_id2 = $("#tag2 :selected").attr("id");
			var tag_id3 = $("#tag3 :selected").attr("id");
			var category_id = $("#second_category :selected").attr("id");
			var article_title = $("#article_title").val();
			var article_desc = $("#article_desc").val();
			var article_content = UE.getEditor('editor').getContent();
			var article_image = $("#article_image").attr("src");
			var article_isTop_name = $('input[name="isTop"]:checked').val();
			var article_id = $('#tid').val();
			var tag_1 = $('#tag_1').val();
			var tag_2 = $('#tag_2').val();
			var tag_3 = $('#tag_3').val();
			if (article_isTop_name == '是') {
				var article_isTop = 1;
			} else {
				var article_isTop = 0;
			}

			if (tag_id2 == tag_id3 && tag_id2 != 0) {
				layer.msg("不能多次選擇同一個標籤哦!", {
					icon : 2
				});
				return;
			}

			if (tag_id1 === tag_id2 || tag_id1 === tag_id3) {
				layer.msg("不能多次選擇同一個標籤哦!", {
					icon : 2
				});
				return;
			}
			if (article_image == "") {
				layer.msg("一定要上傳封面圖哦!", {
					icon : 2
				});
				return;
			}
			if (article_desc == "") {
				layer.msg("博文簡介不能爲空哦!", {
					icon : 2
				});
				return;
			}
			// 1.檢查是否提交了必填項
			$.post("${ctx}/editArticle",//後臺地址
			{
				article_id : article_id,
				article_title : article_title,
				article_desc : article_desc,
				article_content : article_content,
				article_image : article_image,
				article_isTop : article_isTop,
				tag_id1 : tag_id1,
				tag_id2 : tag_id2,
				tag_id3 : tag_id3,
				category_id : category_id,
				tag_1 : tag_1,
				tag_2 : tag_2,
				tag_3 : tag_3
			},//需要提交到後臺的數據
			function(result) {
				if (result) {
					alert("修改成功");
					//添加成功
					layer.msg("修改成功", {
						icon : 1
					});
					//返回到上一個界面
					/* window.parent.location.reload(); */
					/* document.getElementById("myform").reset(); */
				} else {
					layer.msg("修改失敗", {
						icon : 2
					});
				}
			},//回調函數
			"json");
		});
	});
	let UPLOAD_FILES;

	layui.use('upload', function() {
		var upload = layui.upload;
		//提示用戶上傳圖片不可以太大了
		//執行實例
		var uploadInst = upload.render({
			elem : '#test1' //綁定元素
			,
			url : '${ctx}/upload' //上傳接口
			,
			exts : 'jpg|png|jpeg' //可傳輸文件的後綴
			,
			accept : 'file' //video audio images
			,
			done : function(res) {
				//上傳完畢回調
				if (res.code == 0) {
					var returnPath = res.data.returnPath;
					$("#article_image")
							.attr(
									"src",
									"http://localhost:8080/MyBlog/upload/"
											+ returnPath);
					$("#article_image").attr("style",
							"display:block;width:135px;height:180px;");

				}
			},
			error : function() {
				//請求異常回調
				//比如生成一個“重新上傳”的按鈕
			}
		});
	});
</script>
<script type="text/javascript" src="${ctx}/js/umedit/ueditor.config.js"></script>
<script type="text/javascript" src="${ctx}/js/umedit/ueditor.all.min.js"></script>
<script type="text/javascript"
	src="${ctx}/js/umedit/lang/zh-cn/zh-cn.js"></script>
</html>

EditArticle.java

(其中設置一篇博文至多可以選擇三個標籤,至少選擇一個標籤

package servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import dao.ArticleDao;
import dao.ArticleDaoImpl;
import dao.Article_Tag_Dao;
import dao.Article_Tag_DaoImpl;
import pojo.Article;

/**
 * Servlet implementation class EditArticle
 */
@WebServlet("/editArticle")
public class EditArticle extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public EditArticle() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("測試是否進入了editArticle的Servlet方法");
		String result = "false";
		PrintWriter writer = null;
		try {	
			ArticleDao ad = new ArticleDaoImpl();
			//獲取當前時間的時間戳
			Long article_createtime = System.currentTimeMillis();
			String article_title = request.getParameter("article_title");
			int article_id = Integer.parseInt(request.getParameter("article_id"));
			int category_id = Integer.parseInt(request.getParameter("category_id"));
			int article_isTop = Integer.parseInt(request.getParameter("article_isTop"));
			String article_image = request.getParameter("article_image");
			String article_desc = request.getParameter("article_desc");
			String article_content = request.getParameter("article_content");
			int article_likenum = 0;
			int article_views = 0;
			//標籤
			int tag_id1 = Integer.parseInt(request.getParameter("tag_id1"));
			int tag_id2 = Integer.parseInt(request.getParameter("tag_id2"));
			int tag_id3 = Integer.parseInt(request.getParameter("tag_id3"));
			int tag_1 = Integer.parseInt(request.getParameter("tag_1"));
			int tag_2 = Integer.parseInt(request.getParameter("tag_2"));
			int tag_3 = Integer.parseInt(request.getParameter("tag_3"));
			Article a = new Article();
			a.setArticle_id(article_id);
			a.setArticle_content(article_content);
			a.setArticle_createtime(article_createtime);
			a.setArticle_desc(article_desc);
			a.setArticle_isTop(article_isTop);
			a.setArticle_image(article_image);
			a.setArticle_likenum(article_likenum);
			a.setCategory_id(category_id);
			a.setArticle_views(article_views);
			a.setArticle_title(article_title);
			boolean flag = ad.updateArticle(a);
			if(flag) {
				result="true";
				//再執行一次dao方法 通過createtime查詢id 返回id值
				//再將articleId寫到和標籤相連的數據庫中
				Article_Tag_Dao atd = new Article_Tag_DaoImpl();
				//如果第一個標籤 發生了變化
				if(tag_1!=tag_id1) {
					boolean flag2 = atd.updateArticle_Tag(article_id, tag_id1);
					System.out.println("第一個標籤是否加入數據庫成功???"+flag2);
				}
				
				if(tag_id2!=0&&tag_2!=0) {
					boolean flag3 = atd.updateArticle_Tag(article_id, tag_id2);
					System.out.println("第二個標籤是否加入數據庫成功???"+flag3);
				}else if(tag_id2!=0&&tag_2==0) {
					boolean flag3 = atd.insertArticle_Tag(article_id, tag_id2);
					System.out.println("第二個標籤是否加入數據庫成功???"+flag3);
				}else if(tag_id2==0&&tag_2!=0) {
					boolean flag3 = atd.deleteArticle_Tag(article_id, tag_2);
					System.out.println("第二個標籤是否加入數據庫成功???"+flag3);
				}
				if(tag_id3!=0&&tag_3!=0) {
					boolean flag4 = atd.updateArticle_Tag(article_id, tag_id3);
					System.out.println("第三個標籤是否加入數據庫成功???"+flag4);
				}else if(tag_id3!=0&&tag_3==0){
					boolean flag4 = atd.insertArticle_Tag(article_id, tag_id3);
					System.out.println("第三個標籤是否加入數據庫成功???"+flag4);
				}else if(tag_id3==0&&tag_3!=0) {
					boolean flag4 = atd.deleteArticle_Tag(article_id, tag_3);
					System.out.println("第三個標籤是否加入數據庫成功???"+flag4);
				}
			}
			writer = response.getWriter();
			writer.write(result);	
	}catch(Exception e) {
		e.printStackTrace();
	}finally {
		writer.flush();
		writer.close();
	}
		
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

(PS.由於相關涉及的代碼太多了,我就放入一些我認爲容易出差錯的)


最後結束完這篇博文,我的博客後臺系統就更完啦!撒花~~

有需求的人可以進行下載,得說明的是我上傳的是個人博客後臺系統,前臺系統因爲我做的不夠完善,所以沒有上傳QAQ

最後有任何問題歡迎給我留言,我如果看到了就會回覆噠=w=

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章