SpringMVC+Mybatis框架集成开发基础——项目开发流程——03

 项目开发 模块开发思路:

笔记本及笔记 模块功能

cn_user:用户表
cn_notebook:笔记本表
cn_note:笔记表
一个用户有多个笔记本
每个笔记本有多个笔记

系统采用无会话状态方式处理.不使用Session,
因为不适合服务器集群部署。
发送请求(带身份证+Cookie)—>服务器处理

笔记本列表显示
发送Ajax请求
-页面一出现自动发送请求onload
-请求参数为用户ID
-请求地址为/book/loadbooks.do

服务器端处理
/book/loadbooks.do
—>DispatcherServlet
—>HanlderMapping
—>LoadBooksController.execute
—>BookService.loadUserBooks
—>BookDao—>cn_notebook(查询)
—>返回NoteResult结构的JSON数据

Ajax回调处理
-success:解析JSON结果,循环生成笔记本li列表
-error:提示加载笔记列表失败

点笔记本显示笔记列表
发送Ajax请求
-笔记本li单击 onclick发送请求
-请求参数为笔记本ID
-请求地址为/note/loadnotes.do

服务器端处理
/note/loadnotes.do
—>LoadNotesController.execute
—>NoteService.loadBookNotes
—>NoteDao—>cn_note(查询)
—>返回NoteResult结构的JSON结果

Ajax回调处理
-success:解析JSON结果,循环生成笔记li列表
-error:提示加载笔记列表失败

x.addClass("checked");
x.removeClass("checked");
#点击笔记在编辑区显示笔记内容
##发送Ajax请求
-点击笔记列表li onclick
-请求参数为笔记ID
-请求地址为/note/load.do
##服务器端处理
/note/load.do
-->LoadNoteController.execute
-->NoteService.loadNote
-->NoteDao.findById-->cn_note(查询)
-->返回NoteResult结构的JSON结果

##Ajax回调处理
-success:解析JSON将笔记标题和内容显示到编辑区界面
-error:提示加载失败

#点击"保存笔记"按钮处理
##发送Ajax请求
-“保存笔记”按钮单击onclick
-请求参数:笔记标题、笔记内容、笔记ID
-请求地址:/note/update.do

##服务器端处理
/note/update.do
-->UpdateNoteController.execute
-->NoteService.updateNote
-->NoteDao.update-->cn_note(更新)
-->返回NoteResult结构的JSON

##Ajax回调处理

===================
任务一:独立完成功能
 (挑选:登录,注册,笔记本列表,笔记列表等)

任务二:实现笔记本创建功能(任务一完成后选做)

#创建笔记本操作
##发送Ajax请求
-点击对话框中的"创建"按钮 onclick
-请求参数:笔记本名称,用户ID
-请求地址:/book/add.do
##服务器端处理
/book/add.do
-->AddBookController.execute()
-->BookService.addBook()
-->BookDao.save()
-->cn_notebook(插入)
-->返回NoteResult结构的JSON结果
 {"status":0,msg:"创建笔记本成功","data":"笔记本ID"}

测试
http://localhost:8080/cloud_note_learn
/book/add.do?userId=122&bookName=java

##Ajax回调处理
-success: a.关闭对话框;
                b.追加笔记本li列表项;
                c.提示创建笔记本成功
-error:提示创建笔记本失败

#创建笔记处理
##发送Ajax请求
-点击"创建笔记"对话框的"创建"按钮onclick
-请求参数:笔记名称,笔记本ID,用户ID
-请求地址:/note/add.do
##服务器端处理
/note/add.do
-->AddNoteController.execute
-->NoteService.addNote
-->NoteDao.save-->cn_note(插入)
-->返回NoteResult结构的JSON结果
 data属性:笔记ID
##Ajax回调处理
success: a.关闭对话框;b.追加笔记li列表项;c.提示创建笔记成功
$("#note_ul").on("click",".btn_slide_down",fn)


$(this).parents("li").find(".note_menu");
$(this).parent().next();
#笔记删除
描述:点击X按钮,首先弹出一个删除确认框,
然后点击"删除"按钮再发送Ajax请求执行删除处理。
(服务器将笔记记录中的status_id设置成'2'状态)
##发送Ajax请求
-点击X按钮,弹出确认框(alert_delete_note.html)
-点击确认框中"删除"按钮onclick发送请求
-请求参数:笔记ID
-请求地址:/note/recycle.do
##服务器端处理
/note/recycle.do
-->RecycleNoteController.execute
-->NoteService.recycleNote
-->NoteDao-->cn_note(更新status_id='2')
-->返回NoteResult结构的JSON结果
##Ajax回调处理
-success回调 a:关闭对话框;b:删除笔记li;c:提示删除成功
-error回调 提示删除失败

#笔记转移
##弹出转移对话框
单击笔记菜单中的"转移"按钮,
弹出转移笔记对话框(alert_move.html),
加载对话框中的笔记本下拉单moveSelect
##单击"转移"按钮操作
###发送Ajax请求
-单击转移对话框中的"确定"按钮,onclick
-请求参数:笔记ID,对话框选中的笔记本ID
-请求地址:/note/move.do

###服务器端处理
/note/move.do
-->MoveNoteController.execute
-->NoteService.moveNote
-->NoteDao.updateBookId
-->cn_note(更新book_id)
-->返回NoteResult结构的JSON

###Ajax回调处理
-success函数:a关闭对话框;b删除笔记li;c提示转移成功
-error函数:提示转移笔记失败

===================
任务一:完成笔记删除和笔记转移功能
任务二:完成笔记本重命名和删除(选做)

 

项目目录结构:

前端页面部分目录结构:

 

导入需要的Jar:对应的pom.xml配置

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.study</groupId>
  <artifactId>cloud_note_learn</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-webmvc</artifactId>
  		<version>3.2.8.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-core</artifactId>
  		<version>2.2.3</version>
  	</dependency>
  	<dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-databind</artifactId>
  		<version>2.2.3</version>
  	</dependency>
  	<dependency>
  		<groupId>com.fasterxml.jackson.core</groupId>
  		<artifactId>jackson-annotations</artifactId>
  		<version>2.2.3</version>
  	</dependency>
  	<dependency>
  		<groupId>org.mybatis</groupId>
  		<artifactId>mybatis</artifactId>
  		<version>3.3.0</version>
  	</dependency>
  	<dependency>
  		<groupId>org.mybatis</groupId>
  		<artifactId>mybatis-spring</artifactId>
  		<version>1.2.3</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
  		<artifactId>spring-jdbc</artifactId>
  		<version>3.2.8.RELEASE</version>
  	</dependency>
  	<dependency>
  		<groupId>commons-dbcp</groupId>
  		<artifactId>commons-dbcp</artifactId>
  		<version>1.4</version>
  	</dependency>
  	<dependency>
  		<groupId>mysql</groupId>
  		<artifactId>mysql-connector-java</artifactId>
  		<version>5.1.37</version>
  	</dependency>
  	<dependency>
  		<groupId>junit</groupId>
  		<artifactId>junit</artifactId>
  		<version>4.12</version>
  	</dependency>
  	<dependency>
  		<groupId>commons-codec</groupId>
  		<artifactId>commons-codec</artifactId>
  		<version>1.10</version>
  	</dependency>
  </dependencies>
</project>

实体映射配置:

BookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.dk.cloudnote.dao.BookDao">

	<insert id="save" parameterType="com.dk.cloudnote.entity.Book">
		insert into cn_notebook
		(cn_notebook_id,cn_user_id,
		cn_notebook_type_id,cn_notebook_name,
		cn_notebook_desc,cn_notebook_createtime)
		values(#{cn_notebook_id},#{cn_user_id},
			   #{cn_notebook_type_id},#{cn_notebook_name},
			   #{cn_notebook_desc},#{cn_notebook_createtime})
	</insert>
	
	<select id="findByUserId" parameterType="string" 
		resultType="com.dk.cloudnote.entity.Book">
		select * from cn_notebook
		where cn_user_id=#{userId}
	</select>
	
</mapper>

NoteMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.dk.cloudnote.dao.NoteDao">
	
	<update id="updateBookId" parameterType="map">
		update cn_note
		set cn_notebook_id=#{bookId}
		where cn_note_id=#{noteId}
	</update>
	
	<update id="updateStatus" parameterType="map">
		update cn_note
		set cn_note_status_id=#{status}
		where cn_note_id=#{noteId}
	
	</update>
	
	<insert id="save" parameterType="com.dk.cloudnote.entity.Note">
		insert into cn_note
		(cn_note_id,cn_notebook_id,
		cn_user_id,cn_note_status_id,
		cn_note_type_id,cn_note_title,
		cn_note_body,cn_note_create_time,
		cn_note_last_modify_time)
	values (#{cn_note_id},#{cn_notebook_id},
		#{cn_user_id},#{cn_note_status_id},
		#{cn_note_type_id},#{cn_note_title},
		#{cn_note_body},#{cn_note_create_time},
		#{cn_note_last_modify_time})
	
	</insert>
	
	<update id="update" parameterType="com.dk.cloudnote.entity.Note">
		update cn_note
		set cn_note_title=#{cn_note_title},
		cn_note_body=#{cn_note_body},
		cn_note_last_modify_time=#{cn_note_last_modify_time}
		where cn_note_id=#{cn_note_id}
	</update>
	
	<select id="findById" parameterType="string" 
		resultType="com.dk.cloudnote.entity.Note">
		select * from cn_note
		where cn_note_id=#{id}
		
	</select>
	
	<select id="findByBookId" parameterType="string" 
		resultType="com.dk.cloudnote.entity.Note">
		select * from cn_note
		where cn_notebook_id=#{bookId}
	</select>
</mapper>

实体类:

Book.java

package com.dk.cloudnote.entity;

import java.io.Serializable;
import java.sql.Timestamp;

public class Book implements Serializable{
	private String cn_notebook_id;
	private String cn_user_id;
	private String cn_notebook_type_id;
	private String cn_notebook_name;
	private String cn_notebook_desc;
	private Timestamp cn_notebook_createtime;
	
	public String getCn_notebook_id() {
		return cn_notebook_id;
	}
	public void setCn_notebook_id(String cn_notebook_id) {
		this.cn_notebook_id = cn_notebook_id;
	}
	public String getCn_user_id() {
		return cn_user_id;
	}
	public void setCn_user_id(String cn_user_id) {
		this.cn_user_id = cn_user_id;
	}
	public String getCn_notebook_type_id() {
		return cn_notebook_type_id;
	}
	public void setCn_notebook_type_id(String cn_notebook_type_id) {
		this.cn_notebook_type_id = cn_notebook_type_id;
	}
	public String getCn_notebook_name() {
		return cn_notebook_name;
	}
	public void setCn_notebook_name(String cn_notebook_name) {
		this.cn_notebook_name = cn_notebook_name;
	}
	public String getCn_notebook_desc() {
		return cn_notebook_desc;
	}
	public void setCn_notebook_desc(String cn_notebook_desc) {
		this.cn_notebook_desc = cn_notebook_desc;
	}
	public Timestamp getCn_notebook_createtime() {
		return cn_notebook_createtime;
	}
	public void setCn_notebook_createtime(Timestamp cn_notebook_createtime) {
		this.cn_notebook_createtime = cn_notebook_createtime;
	}
}

Note.java

package com.dk.cloudnote.entity;

import java.io.Serializable;

public class Note implements Serializable{
	private String cn_note_id;
	private String cn_notebook_id;
	private String cn_user_id;
	private String cn_note_status_id;
	private String cn_note_type_id;
	private String cn_note_title;
	private String cn_note_body;
	private Long cn_note_create_time;
	private Long cn_note_last_modify_time;
	
	public String getCn_note_id() {
		return cn_note_id;
	}
	public void setCn_note_id(String cn_note_id) {
		this.cn_note_id = cn_note_id;
	}
	public String getCn_notebook_id() {
		return cn_notebook_id;
	}
	public void setCn_notebook_id(String cn_notebook_id) {
		this.cn_notebook_id = cn_notebook_id;
	}
	public String getCn_user_id() {
		return cn_user_id;
	}
	public void setCn_user_id(String cn_user_id) {
		this.cn_user_id = cn_user_id;
	}
	public String getCn_note_status_id() {
		return cn_note_status_id;
	}
	public void setCn_note_status_id(String cn_note_status_id) {
		this.cn_note_status_id = cn_note_status_id;
	}
	public String getCn_note_type_id() {
		return cn_note_type_id;
	}
	public void setCn_note_type_id(String cn_note_type_id) {
		this.cn_note_type_id = cn_note_type_id;
	}
	public String getCn_note_title() {
		return cn_note_title;
	}
	public void setCn_note_title(String cn_note_title) {
		this.cn_note_title = cn_note_title;
	}
	public String getCn_note_body() {
		return cn_note_body;
	}
	public void setCn_note_body(String cn_note_body) {
		this.cn_note_body = cn_note_body;
	}
	public Long getCn_note_create_time() {
		return cn_note_create_time;
	}
	public void setCn_note_create_time(Long cn_note_create_time) {
		this.cn_note_create_time = cn_note_create_time;
	}
	public Long getCn_note_last_modify_time() {
		return cn_note_last_modify_time;
	}
	public void setCn_note_last_modify_time(Long cn_note_last_modify_time) {
		this.cn_note_last_modify_time = cn_note_last_modify_time;
	}
}

映射Dao接口:

BookDao.java

package com.dk.cloudnote.dao;

import java.util.List;

import com.dk.cloudnote.entity.Book;

public interface BookDao {
	public void save(Book book);
	public List<Book> findByUserId(String userId);
}

NoteDao.java

package com.dk.cloudnote.dao;

import java.util.List;
import java.util.Map;

import com.dk.cloudnote.entity.Note;

public interface NoteDao {
	
	/**
	 * 根据笔记ID更新笔记本ID
	 * @param params noteId:笔记ID;bookId:笔记本ID
	 * @return 受影响记录行数
	 */
	public int updateBookId(Map<String,Object> params);
	public int updateStatus(Map<String,Object> params);
	public void save(Note note);
	public int update(Note note);
	public Note findById(String id);
	public List<Note> findByBookId(String bookId);

}

Dao接口方法测试:

TestBookDao.java

package com.dk.cloundnote.dao;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.dao.BookDao;
import com.dk.cloudnote.entity.Book;

public class TestBookDao {
	
	@Test
	public void test1(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		BookDao dao = ac.getBean("bookDao", BookDao.class);
		Book book  = new Book();
		book.setCn_user_id("1234");
		book.setCn_notebook_id("1111");
		book.setCn_notebook_type_id("1");
		book.setCn_notebook_desc("testDESC");
		book.setCn_notebook_name("tname1");
		dao.save(book);
	}

}

TestFindByBookId.java 

package com.dk.cloundnote.dao;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.dao.NoteDao;
import com.dk.cloudnote.entity.Note;

public class TestFindByBookId {
	
	@Test
	public void test(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteDao dao = ac.getBean("noteDao", NoteDao.class);
		List<Note> list = dao.findByBookId("4b86d1f9-6345-4532-bc50-ee86442f004b");
		for(Note note: list){
			System.out.println(note.getCn_note_title()+"||"+note.getCn_note_id());
		}
		
	}

}

 TestLoadBooks.java

package com.dk.cloundnote.dao;

import java.util.List;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.dao.BookDao;
import com.dk.cloudnote.entity.Book;

public class TestLoadBooks {
	
	@Test
	public void test1(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		BookDao dao = ac.getBean("bookDao",BookDao.class);
		List<Book> list = dao.findByUserId("1234");
		for(Book book:list){
			System.out.println(book.getCn_notebook_name());
		}
	}

}

TestNoteDao.java

package com.dk.cloundnote.dao;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.dao.NoteDao;
import com.dk.cloudnote.entity.Note;

public class TestNoteDao {

	@Test
	public void test1(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteDao dao = ac.getBean("noteDao", NoteDao.class);
		Note note = dao.findById("c7862663-b155-4556-bdd7-1b8ef8decf55");
		System.out.println(note.getCn_note_title()+"|"+note.getCn_note_body());
		
	}
	
	@Test
	public void test2(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteDao dao = ac.getBean("noteDao", NoteDao.class);
		Note note = new Note();
		note.setCn_note_body("ttttttttttttbody");
		note.setCn_note_title("testTitle");
		note.setCn_note_id("c7862663-b155-4556-bdd7-1b8ef8decf55");
		int count = dao.update(note);
		System.out.println(count);
		
	}
	
	@Test
	public void test3(){
		String conf = "conf/spring-mybatis.xml";
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteDao dao = ac.getBean("noteDao", NoteDao.class);
		Note note = new Note();
		note.setCn_user_id("test08");
		note.setCn_note_body("ttttttttttttbody");
		note.setCn_note_title("testTitle");
		note.setCn_note_id("we");
		dao.save(note);
		
	}
}

 

测试运行Dao方法后截图:

A.

B. 

C. 

D.

业务层代码:

业务接口部分:

BookService.java

package com.dk.cloudnote.service;

import com.dk.cloudnote.util.NoteResult;

public interface BookService {
	public NoteResult addBook(String userId,String bookName);
	public NoteResult loadUserBooks(String userId);
}

NoteService.java

package com.dk.cloudnote.service;

import com.dk.cloudnote.util.NoteResult;

public interface NoteService {
	
	public NoteResult moveNote(String bookId,String noteId);
	public NoteResult recycleNote(String noteId);
	public NoteResult addNote(String userId,String title,String bookId);
	public NoteResult updateNote(String id,String title,String body);
	public NoteResult loadNote(String noteId);
	public NoteResult loadBookNotes(String bookId);

}

业务实现部分:

BookServiceImpl.java

package com.dk.cloudnote.service;

import java.sql.Timestamp;
import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dk.cloudnote.dao.BookDao;
import com.dk.cloudnote.entity.Book;
import com.dk.cloudnote.util.NoteResult;
import com.dk.cloudnote.util.NoteUtil;

@Service("bookService")
public class BookServiceImpl implements BookService{
	@Resource
	private BookDao bookDao;
	
	public NoteResult loadUserBooks(String userId) {
		NoteResult result = new NoteResult();
		//根据用户ID查询笔记本信息
		List<Book> list = bookDao.findByUserId(userId);
		result.setStatus(0);
		result.setMsg("查询笔记本成功");
		result.setData(list);//返回笔记本信息
		return result;
	}

	public NoteResult addBook(String userId, String bookName) {
		NoteResult result = new NoteResult();
		Book book = new Book();
		book.setCn_user_id(userId);//用户ID
		book.setCn_notebook_name(bookName);//笔记本名
		book.setCn_notebook_type_id("5");//normal
		book.setCn_notebook_desc("");
		Timestamp time = new Timestamp(System.currentTimeMillis());
		book.setCn_notebook_createtime(time);//创建时间
		String bookId = NoteUtil.createId();
		book.setCn_notebook_id(bookId);//笔记本ID
	    bookDao.save(book);//添加笔记本
	    
	    //返回结果
	    result.setStatus(0);
	    result.setMsg("创建笔记本成功");
		result.setData(bookId);//返回笔记本ID
		return result;
	}

}

NoteServiceImpl.java

package com.dk.cloudnote.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.dk.cloudnote.dao.NoteDao;
import com.dk.cloudnote.entity.Note;
import com.dk.cloudnote.util.NoteResult;
import com.dk.cloudnote.util.NoteUtil;

@Service("noteService")
public class NoteServiceImpl implements NoteService{
	@Resource
	private NoteDao noteDao;
	
	public NoteResult loadBookNotes(String bookId) {
		NoteResult result = new NoteResult();
		List<Note> list = noteDao.findByBookId(bookId);
		result.setStatus(0);
		result.setMsg("查询笔记列表成功");
		result.setData(list);
		return result;
	}

	public NoteResult updateNote(String id, String title, String body) {
		NoteResult result = new NoteResult();
		//更新操作
		Note note = new Note();
		note.setCn_note_id(id);//笔记ID
		note.setCn_note_title(title);//标题
		note.setCn_note_body(body);//内容
		long time = System.currentTimeMillis();
		note.setCn_note_last_modify_time(time);//最后更新时间
		noteDao.update(note);
		
		result.setStatus(0);
		result.setMsg("保存笔记完成");
		return result;
	}

	public NoteResult loadNote(String noteId) {
		NoteResult result = new NoteResult();
	    Note note = noteDao.findById(noteId);
	    result.setStatus(0);
	    result.setMsg("加载笔记内容成功");
	    result.setData(note);
		return result;
	}

	public NoteResult addNote(String userId, String title, String bookId) {
		Note note = new Note();
		note.setCn_note_title(title);//标题
		note.setCn_user_id(userId);//用户ID
		note.setCn_notebook_id(bookId);//笔记本ID
		note.setCn_note_status_id("1");//normal
		note.setCn_note_type_id("1");//normal
		note.setCn_note_body("");//空串
		long time = System.currentTimeMillis();
		note.setCn_note_create_time(time);//创建时间
		note.setCn_note_last_modify_time(time);//最后修改时间
		String noteId = NoteUtil.createId();
		note.setCn_note_id(noteId);//笔记ID
		noteDao.save(note);//插入cn_note表
		//返回结果
		NoteResult result = new NoteResult();
		result.setStatus(0);
		result.setMsg("创建笔记成功");
		result.setData(noteId);//返回笔记ID
		return result;
	}

	public NoteResult moveNote(String bookId, String noteId) {
		//更新笔记本ID
		Map<String,Object> params = new HashMap<String,Object>();
		params.put("noteId", noteId);
		params.put("bookId", bookId);
		noteDao.updateBookId(params);
		//返回结果
		NoteResult result = new NoteResult();
		result.setStatus(0);
		result.setMsg("转移笔记成功");
		
		return result;
	}

	public NoteResult recycleNote(String noteId) {
		Map<String,Object> params = new HashMap<String,Object>();
		params.put("noteId", noteId);//笔记ID
		params.put("status", "2");//删除状态
		noteDao.updateStatus(params);//更新笔记状态
		//返回NoteResult
		NoteResult result = new NoteResult();
		result.setStatus(0);
		result.setMsg("删除笔记成功");
		
		return result;
	}

}

业务层功能 单元测试:

TestAddBook.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.service.BookService;
import com.dk.cloudnote.service.UserService;
import com.dk.cloudnote.util.NoteResult;

public class TestAddBook {

	@Test
	public void test1(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac= new  ClassPathXmlApplicationContext(conf);
		BookService service = ac.getBean("bookService", BookService.class);
		NoteResult result = service.addBook("test10", "test10-10bj");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(result.getData());
	}
}

TestLoadBookNotes.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

public class TestLoadBookNotes {
	
	@Test
	public void test(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		NoteResult result = service.loadBookNotes("4b86d1f9-6345-4532-bc50-ee86442f004b");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(result.getData());
	}

}

TestloadUserBooks.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.service.BookService;
import com.dk.cloudnote.util.NoteResult;

public class TestloadUserBooks {

	@Test
	public void test1(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		BookService service = ac.getBean("bookService",BookService.class);
		NoteResult result = service.loadUserBooks("48595f52-b22c-4485-9244-f4004255b972");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(result.getData());
	}
}

TestMoveNote.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

public class TestMoveNote {
	
	@Test
	public void test1(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		NoteResult result = service.moveNote("id-tttt", "ss19055-30e8-4cdc-bfac-97c6bad9518f");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		
	}

}

TestNoteService.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.entity.Note;
import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

public class TestNoteService {
	
	@Test
	public void test1(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		NoteResult result = service.loadNote("1a6e497b-56b5-4eac-8190-b2d726c6f687");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(((Note) result.getData()).getCn_note_status_id());
	}

	@Test
	public void test2(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		Note note = new Note();
		note.setCn_note_body("ttttttttttttbod123y");
		note.setCn_note_title("testTitle");
		note.setCn_note_id("c7862663-b155-4556-bdd7-1b8ef8decf55");
		NoteResult result = service.updateNote(note.getCn_note_id(), note.getCn_note_title(),note.getCn_note_body());
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(result.getData());
	}
	
	@Test
	public void test3(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		Note note = new Note();
		note.setCn_user_id("user");
		note.setCn_note_title("aaaaa");
		note.setCn_notebook_id("id-tttt");
	    NoteResult result = service.addNote(note.getCn_user_id(),note.getCn_note_title(),note.getCn_notebook_id());
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		System.out.println(result.getData());
	}
}

TestRecycleNote.java

package com.dk.cloundnote.service;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

public class TestRecycleNote {
	
	@Test
	public void test1(){
		String[] conf = {"conf/spring-mvc.xml",
		"conf/spring-mybatis.xml"};
		ApplicationContext ac = new ClassPathXmlApplicationContext(conf);
		NoteService service = ac.getBean("noteService",NoteService.class);
		NoteResult result = service.recycleNote("1a6e497b-56b5-4eac-8190-b2d726c6f687");
		System.out.println(result.getStatus());
		System.out.println(result.getMsg());
		
	}

}

控制层功能:

AddBookController.java

package com.dk.cloudnote.controller.book;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.BookService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/book")
public class AddBookController {
	
	@Resource
	private BookService bookService;
	
	@RequestMapping("/add")//可以省略.do
	@ResponseBody
	public NoteResult execute(String userId,String bookName){
		System.out.println("AddBookController....");
		NoteResult result = bookService.addBook(userId, bookName);
		return result;
	}

}

LoadBookdsController.java

package com.dk.cloudnote.controller.book;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.BookService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/book")
public class LoadBookdsController {

	@Resource
	private BookService bookService;

	@RequestMapping("/loadbooks.do")
	@ResponseBody
	public NoteResult execute(String userId){
		System.out.println("LoadBookdsController....");
		NoteResult result = bookService.loadUserBooks(userId);
		return result;
	}
}

AddNoteController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class AddNoteController {

	@Resource
	private NoteService noteService;
	
	@RequestMapping("/add.do")//
	@ResponseBody
	public NoteResult execute(String userId,String title,String bookId){
		System.out.println("AddNoteController....");
		NoteResult result = noteService.addNote(userId, title, bookId);
		return result;
	}
}

LoadNoteController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class LoadNoteController {

	@Resource
	private NoteService noteService;
	
	@RequestMapping("/load.do")
	@ResponseBody
	public NoteResult  execute(String noteId){
		System.out.println("LoadNoteController....");
		NoteResult result = noteService.loadNote(noteId);
		return result;
	}
	
}

LoadNotesController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class LoadNotesController {
	@Resource
	private NoteService noteService;
	
	@RequestMapping("/loadnotes.do")
	@ResponseBody
	public NoteResult execute(String bookId){
		System.out.println("LoadNotesController....");
		NoteResult result = noteService.loadBookNotes(bookId);
		return result;
	}

}

MoveNoteController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class MoveNoteController {
	@Resource
	private NoteService noteService;
	
	@RequestMapping("/move")
	@ResponseBody
	public NoteResult execute(String bookId,String noteId){
		System.out.println("MoveNoteController....");
		NoteResult result = noteService.moveNote(bookId, noteId);
		
		return result;
	}
}

RecycleNoteController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class RecycleNoteController {
	@Resource
	private NoteService noteService;
	
	@RequestMapping("/recycle")
	@ResponseBody
	public NoteResult execute(String noteId){
	   System.out.println("RecycleNoteController....");
	   NoteResult result = noteService.recycleNote(noteId);
	   return result;
	}
	
	
}

UpdateNoteController.java

package com.dk.cloudnote.controller.note;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dk.cloudnote.service.NoteService;
import com.dk.cloudnote.util.NoteResult;

@Controller
@RequestMapping("/note")
public class UpdateNoteController {

	@Resource
	private NoteService noteService;
	
	@RequestMapping("update.do")
	@ResponseBody
	public NoteResult execute(String noteId,String title,String body){
		System.out.println("UpdateNoteController....");
		NoteResult result = noteService.updateNote(noteId, title, body);
		return result;
	}
}

控制层测试:

浏览器录入http://localhost:8088/cloud_note_learn/book/add.do?userId=122&bookName=java

页面测试结果:

其他控制层代码功能测试同上。 

前端逻辑实现:

book.js

//加载用户笔记本列表
function loadUserBooks(){
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/book/loadbooks.do",
		type:"post",
		data:{"userId":userId},
		dataType:"json",
		success:function(result){
			if(result.status==0){//成功
				var books = result.data;//获取服务器返回的笔记本信息
				//循环笔记本数组
				for(var i=0;i<books.length;i++){
					var bookName = 
						books[i].cn_notebook_name;//获取笔记本名
					var bookId = books[i].cn_notebook_id;//获取笔记本ID
					//生成笔记本列表li元素
					createBookLi(bookId,bookName);
				}
			}
		},
		error:function(){
			alert("加载用户笔记本列表失败");
		}
	});
};

//创建笔记本列表li
function createBookLi(bookId,bookName){
 var sli = '<li class="online">';
	 sli+= '	<a>';
	 sli+= '		<i class="fa fa-book" title="online" rel="tooltip-bottom">';
	 sli+= '		</i>';
	 sli+= bookName;
	 sli+= '	</a>';
	 sli+= '</li>';
	//将bookId绑定到li元素上
	var $li = $(sli);
	$li.data("bookId",bookId);
	//添加到笔记本列表ul元素中
	$("#book_ul").append($li);
};

//创建笔记本
function sureAddBook(){
	//获取请求参数
	var bookName = $("#input_notebook").val().trim();
	//TODO检查格式
	//发送Ajax请求
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/book/add.do",
		type:"post",
		data:{"bookName":bookName,"userId":userId},
		dataType:"json",
		success:function(result){
			if(result.status==0){
				//关闭对话框
				//closeAlertWindow();
				//添加笔记本li
				var bookId = result.data;//笔记本ID
				createBookLi(bookId,bookName);
				//提示成功
				alert(result.msg);
			}
		},
		error:function(){
			alert("创建笔记本失败");
		}
	});
};



note.js

//"保存笔记"按钮处理
function updateNote(){
	//获取请求参数
	var body = um.getContent();//笔记内容
	var title = $("#input_note_title").val();//笔记标题
	var $li = $("#note_ul a.checked").parent();
	var noteId = $li.data("noteId");//笔记ID
	//TODO 格式检查
	//发送Ajax请求
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/note/update.do",
		type:"post",
		data:{"noteId":noteId,
			"title":title,"body":body},
		dataType:"json",
		success:function(result){
			if(result.status==0){
				//更新列表标题名称
		      var sli='<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i>';
				sli+= title;
				sli+='<button type="button" class="btn btn-default btn-xs btn_position btn_slide_down"><i class="fa fa-chevron-down"></i></button>';
				$li.find("a").html(sli);//替换<a>元素中的内容
				//提示保存完成
				alert(result.msg);
			}
		},
		error:function(){
			alert("保存笔记失败");
		}
	});
};
//单击笔记加载笔记内容
function loadNoteContent(){
		//将点击的笔记设置为选中
		$("#note_ul a").removeClass("checked");
		$(this).find("a").addClass("checked");
		//获取请求参数
		var noteId = $(this).data("noteId");
		//发送Ajax请求
		$.ajax({
			url:"http://localhost:8088/cloud_note_learn/note/load.do",
			type:"post",
			data:{"noteId":noteId},
			dataType:"json",
			success:function(result){
				if(result.status==0){
					var title = 
						result.data.cn_note_title;//标题
					var body = 
						result.data.cn_note_body;//内容
					//显示到编辑区
					$("#input_note_title").val(title);
					um.setContent(body);//获取使用um.getContent();
					//显示编辑区,隐藏预览区
					$("#pc_part_3").show();
					$("#pc_part_5").hide();
				}
			},
			error:function(){
				alert("加载笔记内容失败");
			}
		});
	};

//根据笔记本加载笔记列表
function loadBookNotes(){
	//切换列表显示区
	$("#pc_part_6").hide();
	$("#pc_part_2").show();
	$("#pc_part_4").hide();
	$("#pc_part_7").hide();
	$("#pc_part_8").hide();
	//将点击的笔记本设置为选中状态
	$("#book_ul a").removeClass("checked");
	$(this).find("a").addClass("checked");
	//获取点击的笔记本li的ID值
	var bookId = $(this).data("bookId");
	//发送Ajax请求加载笔记
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/note/loadnotes.do",
		type:"post",
		data:{"bookId":bookId},
		dataType:"json",
		success:function(result){
			if(result.status==0){//成功
				var notes = result.data;//获取返回的笔记集合
				//清除原有列表li
				$("#note_ul").empty();
				//循环生成笔记列表li
				for(var i=0;i<notes.length;i++){
					var noteTitle = 
							notes[i].cn_note_title;//笔记标题
					var noteId = notes[i].cn_note_id;//笔记ID
					//创建一个笔记li元素
					createNoteLi(noteId,noteTitle);
				}
			}
		},
		error:function(){
			alert("加载笔记列表失败");
		}
	});
};

//创建一个笔记li
function createNoteLi(noteId,noteTitle){
	var sli = "";
	sli+='<li class="online">';
	sli+='	<a>';
	sli+='		<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i>';
	sli+= noteTitle;
	sli+='		<button type="button" class="btn btn-default btn-xs btn_position btn_slide_down"><i class="fa fa-chevron-down"></i></button>';
	sli+='	</a>';
	sli+='	<div class="note_menu" tabindex="-1">';
	sli+='		<dl>';
	sli+='			<dt><button type="button" class="btn btn-default btn-xs btn_move" title="移动至..."><i class="fa fa-random"></i></button></dt>';
	sli+='			<dt><button type="button" class="btn btn-default btn-xs btn_share" title="分享"><i class="fa fa-sitemap"></i></button></dt>';
	sli+='			<dt><button type="button" class="btn btn-default btn-xs btn_delete" title="删除"><i class="fa fa-times"></i></button></dt>';
	sli+='		</dl>';
	sli+='	</div>';
	sli+='</li>';
	var $li = $(sli);
	$li.data("noteId",noteId);//给li元素绑定笔记id值
	//添加到笔记列表ul元素中
	$("#note_ul").append($li);
};

//创建笔记
function sureAddNote(){
	//获取请求参数
	var title = $("#input_note").val().trim();//笔记标题
	var $li = $("#book_ul a.checked").parent();
	var bookId = $li.data("bookId");//笔记本ID
	//TODO格式检查
	//发送Ajax请求
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/note/add.do",
		type:"post",
		data:{"userId":userId,
			"title":title,"bookId":bookId},
		dataType:"json",
		success:function(result){
			if(result.status==0){
				//关闭对话框
				closeAlertWindow();
				//添加笔记li
				var noteId = result.data;//返回的笔记ID
				createNoteLi(noteId,title);
				//弹出提示框
				alert(result.msg);
			}
		},
		error:function(){
			alert("创建笔记失败");
		}
	});
};

//显示笔记菜单
function showNoteMenu(){
	//将所有菜单隐藏
	$("#note_ul .note_menu").hide();
	//显示当前li的菜单
	var menu = $(this).parent().next();
	menu.slideDown(1000);//显示菜单div
	//设置当前li选中
	$("#note_ul a").removeClass("checked");//取消所有a元素的class值
	$(this).parent().addClass("checked");//定位a元素追加class值
	//阻止后续body事件冒泡
	return false;
};

//确定删除笔记
function sureRecycleNote(){
	//获取请求参数:笔记ID
	var $li = $("#note_ul a.checked").parent();
	var noteId = $li.data("noteId");
	//发送Ajax请求
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/note/recycle.do",
		type:"post",
		data:{"noteId":noteId},
		dataType:"json",
		success:function(result){
			if(result.status==0){
				//关闭对话框
				closeAlertWindow();
				//删除笔记li
				$li.remove();
				//清空编辑区笔记内容
				um.setContent("");
				$("#input_note_title").val("");
				//提示成功
				alert(result.msg);
			}
		},
		error:function(){
			alert("删除笔记失败");
		}
	});
};

//笔记转移操作
function sureMoveNote(){
	//获取请求参数
	var $li = $("#note_ul a.checked").parent();
	var noteId = $li.data("noteId");
	var bookId = $("#moveSelect").val();
	//TODO 检查参数格式
	//发送Ajax请求
	$.ajax({
		url:"http://localhost:8088/cloud_note_learn/note/move.do",
		type:"post",
		data:{"bookId":bookId,"noteId":noteId},
		dataType:"json",
		success:function(result){
			if(result.status==0){
				//a关闭对话框
				closeAlertWindow();
				//b删除笔记li
				$li.remove();
				//c提示转移成功
				alert(result.msg);
			}
		},
		error:function(){
			alert("转移笔记失败");
		}
	});
};

edit.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>我的笔记</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="x-pjax-version" content="v173">
        <link rel="apple-touch-icon-precomposed" sizes="144x144" href="ico/favico-144-precomposed.png">
        <link rel="apple-touch-icon-precomposed" sizes="114x114" href="ico/favico-114-precomposed.png">
        <link rel="apple-touch-icon-precomposed" sizes="72x72" href="ico/favico-72-precomposed.png">
        <link rel="apple-touch-icon-precomposed" href="ico/favico-57-precomposed.png">
        <link rel="shortcut icon" href="ico/favico.png">
        <link rel="shortcut icon" href="ico/favico.ico">
        <link rel="stylesheet" href="styles/icon.css"/>
        <link rel="stylesheet" href="styles/main.css"/>
		<!-- Google-Code代码高亮CSS -->
        <link rel="stylesheet" href="styles/prettify.css"/>
		<!-- Ueditor编辑器CSS -->
		<link href="styles/umeditor.min.css" type="text/css" rel="stylesheet">
<script type="text/javascript" 
		src="scripts/jquery.min.js">
</script>
<script type="text/javascript"
		src="scripts/cookie_util.js">
</script>
<script type="text/javascript"
		src="scripts/book.js">
</script>
<script type="text/javascript"
		src="scripts/note.js">
</script>
<script type="text/javascript"
		src="scripts/alert.js">
</script>
<script type="text/javascript"
		src="scripts/share.js">
</script>
<script type="text/javascript">
//获取Cookie中的用户ID
var userId = getCookie("userId");
if(userId!=null){//用户ID存在
	$(function(){
		//加载用户笔记本列表
		loadUserBooks();
		//点击笔记本加载笔记列表(动态绑定)
		//父元素.on("事件类型","子元素选择器",fn);
		$("#book_ul").on("click","li",loadBookNotes);
		//点击笔记加载笔记内容
		$("#note_ul").on("click","li",loadNoteContent);
		//点击"保存笔记"按钮
		$("#save_note").click(updateNote);
		//点击"+"按钮弹出创建笔记本对话框
		$("#add_notebook").click(alertAddBookWindow);
		//关闭对话框处理
		$("#can").on("click",".cancle,.close",closeAlertWindow);
		//创建笔记本操作
		$("#can").on("click","#sure_addbook",sureAddBook);
		//点击"+"按钮弹出创建笔记对话框
		$("#add_note").click(alertAddNoteWindow);
		//创建笔记操作
		$("#can").on("click","#sure_addnote",sureAddNote);
		//笔记菜单处理
		$("#note_ul").on("click",".btn_slide_down",showNoteMenu);
		//点击body隐藏笔记菜单
		$("body").click(function(){
			$("#note_ul .note_menu").hide();
		});
		//点击笔记菜单的x按钮,弹出确认框
		$("#note_ul").on("click",".btn_delete",alertRecycleNoteWindow);
		//单击确认框中"删除"按钮
		$("#can").on("click","#sure_recyclenote",sureRecycleNote);
		//点击笔记菜单的"转移"按钮,弹出转移对话框
		$("#note_ul").on("click",".btn_move",alertMoveNoteWindow);
		//确定转移笔记操作
		$("#can").on("click","#sure_movenote",sureMoveNote);
		//笔记分享操作
		$("#note_ul").on("click",".btn_share",sureShareNote);
		//搜索分享笔记
		$("#search_note").keydown(searchShareNote);
		//分享笔记查看
		$("#search_ul").on("click","li",loadShareContent);
		//收藏笔记
		$("#search_ul").on("click","button",function(){
			//获取请求参数
			var $li = $(this).parents("li");
			var shareId = $li.data("shareId");
			//发送Ajax请求
			$.ajax({
				url:"http://localhost:8088/cloud_note_learn/share/favor.do",
				type:"post",
				data:{"shareId":shareId,"userId":userId},
				dataType:"json",
				success:function(result){
					if(result.status==0){
						alert(result.msg);
					}else if(result.status==1){
						alert(result.msg);
					}else if(result.status==2){
						alert(result.msg);
					}
				},
				error:function(){
					alert("收藏笔记失败");
				}
			});
		});
		
	});
}else{//用户ID不存在
	window.location.href="log_in.html";
}
</script>
    </head>
    <body class="animated fadeIn">
        <header class="header">
            <div class="header-brand">
                <a data-pjax=".content-body" href="edit.html">
                    <img class="brand-logo" src="images/dummy/8986f28e.stilearn-logo.png" alt="Stilearn Admin Sample Logo">
                </a>
            </div>
            <div class="header-profile">
                <div class="profile-nav">
                    <span class="profile-username"></span>
                    <a  class="dropdown-toggle" data-toggle="dropdown">
                        <span class="fa fa-angle-down"></span>
                    </a>
                    <ul class="dropdown-menu animated flipInX pull-right" role="menu">
                        <li><a href="Change_password.html"><i class="fa fa-user"></i> 修改密码</a></li>
                        <li class="divider"></li>
                        <li><a id="logout" href="#" ><i class="fa fa-sign-out"></i> 退出登录</a></li>
                    </ul>
                </div>
            </div>
            <form class="form-inline" onsubmit="return false;">
                <button type="button" class="btn btn-default btn-expand-search"><i class="fa fa-search"></i></button>
                <div class="toggle-search">
                    <input type="text" class="form-control" placeholder="搜索笔记" id='search_note'>
                    <button type="button" class="btn btn-default btn-collapse-search"><i class="fa fa-times"></i></button>
                </div>
            </form>
            <ul class="hidden-xs header-menu pull-right">
                <li>
                    <a href="activity.html" target='_blank' title="笔记活动">活动</a>
                </li>
            </ul>
        </header>
		<div class="row" style='padding:0;' id='center'>
			<!-- alert_background-->
			<div class="opacity_bg" style='display:none'></div>
			<!-- alert_notebook -->
			<div id="can"></div>
			<div class="col-xs-2" style='padding:0;' id='pc_part_1'>
				<!-- side-right -->
				<div class="pc_top_first">
					<h3>全部笔记本</h3>
					<button type="button" class="btn btn-default btn-xs btn_plus" id='add_notebook'><i class="fa fa-plus"></i></button>
				</div>
				<aside class="side-right" id='first_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul id="book_ul" class="contacts-list">
								<!-- 
									<li class="online">
										<a>
											<i class="fa fa-book" title="online" rel="tooltip-bottom">
											</i> 
											默认笔记本
										</a>
									</li>
									-->
								</ul>
							</div>
						</div>
					</div>
				</aside>
				<div class="row clear_margin">
					<div class="col-xs-4 click" id='rollback_button' title='回收站'><i class='fa fa-trash-o' style='font-size:20px;line-height:31px;'></i></div>
					<div class="col-xs-4 click" id='like_button' title='收藏笔记本'><i class='fa fa-star' style='font-size:20px;line-height:31px;'></i></div>
					<div class="col-xs-4 click" id='action_button' title='参加活动笔记'><i class='fa fa-users' style='font-size:20px;line-height:30px;'></i></div>
				</div>
			</div>
			<!-- 全部笔记本 -->
			<!-- 全部笔记 -->
			<div class="col-xs-3" style='padding:0;' id='pc_part_2'>
				<div class="pc_top_second" id='notebookId'>
					<h3>全部笔记</h3>
					<button type="button" class="btn btn-default btn-xs btn_plus" id='add_note'><i class="fa fa-plus"></i></button>
				</div>
				<aside class="side-right" id='second_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul id="note_ul" class="contacts-list">
								<!-- 
									<li class="online">
										<a  class='checked'>
											<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i> 使用Java操作符<button type="button" class="btn btn-default btn-xs btn_position btn_slide_down"><i class="fa fa-chevron-down"></i></button>
										</a>
										<div class="note_menu" tabindex='-1'>
											<dl>
												<dt><button type="button" class="btn btn-default btn-xs btn_move" title='移动至...'><i class="fa fa-random"></i></button></dt>
												<dt><button type="button" class="btn btn-default btn-xs btn_share" title='分享'><i class="fa fa-sitemap"></i></button></dt>
												<dt><button type="button" class="btn btn-default btn-xs btn_delete" title='删除'><i class="fa fa-times"></i></button></dt>
											</dl>
										</div>
									</li>
								-->
								</ul>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 全部笔记 -->
			<!-- 回收站笔记 -->
			<div class="col-xs-3" style='padding:0;display:none;' id='pc_part_4'>
				<div class="pc_top_second">
					<h3>回收站笔记</h3>
				</div>
				<aside class="side-right" id='four_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul class="contacts-list">
									<li class="disable"><a ><i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i> 虚假回收站笔记<button type="button" class="btn btn-default btn-xs btn_position btn_delete"><i class="fa fa-times"></i></button><button type="button" class="btn btn-default btn-xs btn_position_2 btn_replay"><i class="fa fa-reply"></i></button></a></li>
								</ul>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 回收站笔记 -->
			<!-- 搜索笔记列表 -->
			<div class="col-xs-3" style='padding:0;display:none;' id='pc_part_6'>
				<div class="pc_top_second">
					<h3>搜索结果</h3>
				</div>
				<aside class="side-right" id='sixth_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul id="search_ul" class="contacts-list">
								</ul>
							</div>
						</div>
						<div id='more_note'>更多...</div>
					</div>
				</aside>
			</div>
			<!-- 搜索笔记列表 -->
			<!-- 收藏笔记列表 -->
			<div class="col-xs-3" style='padding:0;display:none;' id='pc_part_7'>
				<div class="pc_top_second">
					<h3>已收藏笔记</h3>
				</div>
				<aside class="side-right" id='seventh_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul class="contacts-list">
									<!--li class="idle"><a ><i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i> switch多分支结构<button type="button" class="btn btn-default btn-xs btn_position btn_delete"><i class="fa fa-times"></i></button></a></li-->
								</ul>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 收藏笔记列表 -->
			<!-- 参加活动的笔记列表 -->
			<div class="col-xs-3" style='padding:0;display:none;' id='pc_part_8'>
				<div class="pc_top_second">
					<h3>参加活动的笔记</h3>
				</div>
				<aside class="side-right" id='eighth_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body">
								<ul class="contacts-list">
									<!--li class="offline"><a ><i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i> 样式用例(点击无效)</a></li-->
								</ul>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 参加活动的笔记列表 -->
			<!-- 编辑笔记 -->
			<div class="col-sm-7" id='pc_part_3'>
				<!-- side-right -->
				<div class="pc_top_third">
					<div class="row">
						<div class="col-xs-9">
							<h3>编辑笔记</h3>
						</div>
						<div class="col-xs-3">
							<button type="button" class="btn btn-block btn-sm btn-primary" id='save_note'>保存笔记</button>
						</div>
					</div>
				</div>
				<aside class="side-right" id='third_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body clear_margin">
								<!--- 笔记标题 --->
								<div class="row" >
									<div class="col-xs-8">
										<input type="text" class="form-control" id="input_note_title" placeholder='笔记标题...'>
									</div>
								</div>
								<!--- 笔记标题 --->
								<div class="row">
									<div class="col-sm-12">
										<!--- 输入框 --->
										<script type="text/plain" id="myEditor" style="width:100%;height:400px;">
										</script>
										<!--- 输入框 --->
									</div>
								</div>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 编辑笔记 -->
			<!-- 预览笔记 -->
			<div class="col-sm-7" id='pc_part_5' style='display:none;' >
				<div class="pc_top_third">
					<div class="row">
						<div class="col-xs-9">
							<h3>预览笔记</h3>
						</div>
					</div>
				</div>
				<aside class="side-right" id='fifth_side_right'>
					<div class="module" data-toggle="niceScroll">
						<div class="chat-contact">
							<div class="contact-body clear_margin">
								<h4 id="noput_note_title"></h4>
								<p id="noput_note_body">
								
								</p>
							</div>
						</div>
					</div>
				</aside>
			</div>
			<!-- 预览笔记 -->
		</div>
        <footer>
            <p>&copy; 2014 Stilearning</p>
			<div style='position:absolute;top:5PX;height:30px;right:20px;line-height:26px;border:1px solid #0E7D76;display:none;background:#fff'>
				<strong style='color:#0E7D76;margin:0 10px;'></strong>
			</div>
        </footer>
		<script type="text/javascript">
			//加载DOM之后处理页面高度
			function get_dom(e){
				return document.getElementById(e);
			}
			function set_height(){
				var pc_height=window.innerHeight;
				pc_height=pc_height-132;
				get_dom('first_side_right').style.height=(pc_height-31)+'px';
				get_dom('second_side_right').style.height=pc_height+'px';
				get_dom('four_side_right').style.height=pc_height+'px';
				get_dom('sixth_side_right').style.height=pc_height+'px';
				get_dom('seventh_side_right').style.height=pc_height+'px';
				get_dom('eighth_side_right').style.height=pc_height+'px';
				get_dom('third_side_right').style.height=(pc_height-15)+'px';
				get_dom('fifth_side_right').style.height=(pc_height-15)+'px';
			}
			function myEditorWidth(){
				var dom=get_dom('third_side_right');
				var style=dom.currentStyle||window.getComputedStyle(dom, null);
				get_dom('myEditor').style.width=style.width;
			}
			set_height();
			//改变窗口大小时调整页面尺寸
			window.onresize=function(){
				set_height();
				var width=$('#third_side_right').width()-35;
				$('.edui-container,.edui-editor-body').width(width);
				$('#myEditor').width(width-20);
			};
		</script>
        <script type="text/javascript" src="scripts/jquery.min.js"></script>

		<!-- Bootstrap框架JS -->
        <script src="scripts/bootstrap.min.js"></script>
        <script src="scripts/js-prototype.js"></script>       
        <script src="scripts/theme-setup.js"></script>
		<!-- Google-Code代码高亮JS -->
        <script class="re-execute" src="scripts/run_prettify.js"></script>
		<!-- Ueditor编辑器JS -->
		<script type="text/javascript" charset="utf-8" src="scripts/ue/umeditor.config.js"></script>
		<script type="text/javascript" charset="utf-8" src="scripts/ue/umeditor.min.js"></script>
		<script type="text/javascript" src="scripts/ue/lang/zh-cn.js"></script>
		
		<script type="text/javascript">
			//重写JS原生alert函数
				window.alert=function(e){
					$('#can').load('./alert/alert_error.html',function(){
						$('#error_info').text(' '+e);
						$('.opacity_bg').show();
					});
				}
			//实例化Ueditor编辑器
			var um = UM.getEditor('myEditor');
		</script>
		</body>		
</html>

使用Tomcat 加载项目工程后 进行测试。

浏览器录入:http://localhost:8088/cloud_note_learn/log_in.html 

相关测试截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder_Boy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值