动吧旅游项目 日志模块 part2

  • Post author:
  • Post category:其他




功能简介:

基于用户名查询信息:

在这里插入图片描述

在log_list中

$(".input-group-btn").on("click",".btn-search",doQueryObjects)	
	

添加方法:

//处理查询按钮事件
	function doQueryObjects(){
		//1.定义参数
		$("#pageId").data("pageCurrent",1);//设置当前页码值
		
		
		doGetObjects();//注意log_list和page里面doGetObjects()是否有重复
	}

在doGetObjects();中添加:

  var uname=$("#searchNameId").val();
		//这里的key需要和服务端接收的参数的名字相同
		if(uname)params.username=uname;//向json格式js对象中动态添加key,value

在这里插入图片描述

向json格式中动态添加值
在这里插入图片描述



删除功能的实现

在这里插入图片描述


数据架构分析


在这里插入图片描述


删除业务时序分析


在这里插入图片描述


代码的实现


SysLogMapper.xml三种写法:

1)第一种写法:

<delete id="deleteObjects">

       delete from sys_Logs

       where id in

       <foreach collection="ids"      open="("       close=")"      separator=","      item="id">        
             #{id}

        </foreach>

    </delete>

2)第二种写法,从可靠性的角度分析,假如ids的值为null或长度为0时,SQL构建可能会出现语法问题,修改为:

<delete id="deleteObjects">
  		delete from sys_logs
  		<where >
  		<if test="ids!=null and ids.length>0">
  		  		id in
  		<foreach collection="array" open="(" close=")" separator="," item="id">
  	  		#{id}
  		</foreach>  		
  		</if>
  		or 1=2
  		</where>
  	</delete>

3)第三种写法,从SQL执行性能角度分析,一般在SQL语句中不建议使用in表达式,可以参考如下代码进行实现(重点是forearch中or运算符的应用):

<delete id="deleteObjects">
  	delete from sys_logs
  	<where>
  	<choose>
  		<when test="ids!=null and ids.length>0">
  			id in
  		<foreach collection="array" open="(" close=")" separator="," item="id">
  	  		#{id}
  		</foreach> 
  		</when>
  		<otherwise>
  			1=2
  		</otherwise>
  	</choose>
  	</where>
  	</delete>

SyslogDao中

/**
	 *基于多个id执行删除操作 
	 * */
	int deleteObjects(Integer...ids);
	//int deleteObjects(@params("ids")Integer...ids);

SysLogService中:

 /**
	  * 基于条件进行分页查询
     * @param ids    
     * @return 删除的函数
     */
	int deleteObjects(Integer...ids);

SysLogServiceImpl中:

@Override
	public int deleteObjects(Integer... ids) {
		// TODO Auto-generated method stub
		//1.判定参数合法性
		if(ids==null||ids.length==0)
			throw new IllegalArgumentException("参数值无效");
		//2.执行删除
		int rows=sysLogDao.deleteObjects(ids);
		//3.验证结果
		if(rows==0)
			throw new ServiceException("记录可能已经不存在!");
		return rows;
	}

SysLogController中;

@RequestMapping("doDeleteObjects")
	@ResponseBody
	public JsonResult doDeleteObjects(Integer... ids) {
		sysLogService.deleteObjects(ids);
		return new JsonResult("delete ok");
		
	}

代码测试成功后显示:

在这里插入图片描述

前端代码:

log_list.html中,首先绑定事件:

	//on函数为jquery中的一个事件注册函数(推荐)
		//on函数语法:$(""选择器).on(“事件”,“子元素选择器”[,数据],事件处理函数)
$(".input-group-btn")
	.on("click",".btn-search",doQueryObjects)
	.on("click",".btn-delete",doDeleteObjects)

基于代码实现:

//向服务端发送异步请求执行删除操作
	function doDeleteObjects(){
		//1.定义请求参数
		//1.1获取用户选中记录的id值并将其存储到数组
		var idArray=doGetChenckIds();//[1,2,3,4,5]
		console.log("idArray",idArray);
		
		//1.2判定是否选中
		if(!idArray||idArray.length==0){
			alert("你还没有选中需要删除的内容");
			return;
		}
		//1.3给出提示确定删除吗?
		if(!confirm("确定删除吗"))return;
		//1.4构建请求参数
		var params={"ids":idArray.toString()};//{"ids":"1,2,3,4,5"}
		console.log("params",params);
		//2.定义请求url
		var url="log/doDeleteObjects";
		//3.发送请求执行删除操作
		$.post(url,params,function(result){
			if(result.state==1){
				alert(result.message);
				doGetObjects();//刷新
			}else{
				alert(result.message);
			}
		})
	}
//获取选中记录的id值并将其存储到数组中
	function doGetChenckIds(){
		var idArray=[];//new Array();
		//$("#tbodyId input[type=checkbox]")
		$("#tbodyId input:checkbox")
		.each(function(){//each()函数表示迭代
			//$(this)代表input类型为checkbox的值
			if($(this).prop("checked")){//选中则布尔表达式为true
				idArray.push($(this).val())
			}
		});
		return idArray;
	}


全选全不选事件:


事件的绑定:

//全选checkbox对象上的事件注册(一般与状态相关的事件用change)
	$("#checkAll").change(doChangeTableBodyCheckBoxState);
	//tbody中checkbox对象的事件注册
	
	$("#tbodyId")
	.on("change","input:checkbox",doChangeTableHeadCheckBoxState);
	

函数的实现:

//修改tbody中checkbox对象的状态
	function doChangeTableBodyCheckBoxState(){
		//1.获取全选checkbox对象的checked属性
		//var flag=$(this).prop("checked");
		var flag=$("#checkAll").prop("checked");
		//2.设置tbody中checkbox对象的checked属性的值
		$("#tbodyId input:checkbox").prop("checked",flag);
	}

//基于tbody中checkbox对象的状态修改thead中checkbox对象状态
	function doChangeTableHeadCheckBoxState(){
		
		//1.获取tbody中checkbox对象的checked属性的值并进行逻辑与操作
		var flag=true;
		$("#tbodyId input:checkbox")
		.each(function(){
			flag=flag&&$(this).prop("checked");
		})
		//2.修改thead种checkbox对象的值
		$("#checkAll").prop("checked",flag);
		
	}

在这里插入图片描述


当一页上有全选,执行跳转后另一页全选状态消失


log_list中doHandleQueryResponseResult()方法中:

在这里插入图片描述


最后一页执行删除跳转到前一页


删除以后的刷新操作

log_list中doDeleteObjects()方法:

在这里插入图片描述

在这里插入图片描述


当数据只有一页,执行全删除,要求错误信息打印在页面


doHandleQueryResponseResult方法中:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

用浏览器清空div中内容:

在这里插入图片描述


作业


在这里插入图片描述

在这里插入图片描述

1.第一种写法,整个页面的引入:

在这里插入图片描述

2.只引入页面一部分内容

A

在这里插入图片描述

3.引入片段

在这里插入图片描述

在这里插入图片描述

thymeleaf中三种引入方式insert,replace,include的区别:

在这里插入图片描述




js的知识点


1.on函数


on函数为jquery中的一个事件注册函数(推荐);on函数用于在指定html元素上注册事件,当点击html元素内部的子元素时可以触发事件处理。


on函数语法:$(“选择器”).on(“事件”,“子元素选择器”[,数据],事件处理函数)


1.1on的点击事件注册

$(".input-group-btn")
	.on("click",".btn-search",doQueryObjects)
	.on("click",".btn-delete",doDeleteObjects)

1.2on的change事件注册

//tbody中checkbox对象的事件注册
	$("#tbodyId")
	.on("change","input:checkbox",doChangeHeaderCheckBoxState);

1.3同时注册多个

 $("#pageId").on("click",".first,.last,.pre,.next",doJumpToPage);


2.文档就绪事件函数

//此函数是在页面加载完成后执行
    $(function(){
    	doLoadUI("load-log-id","log/log_list");
    	//load-menu-id为加载的div的id,menu/menu_list为controller中的加载路径
    	doLoadUI("load-menu-id","menu/menu_list");
    })


3.load函数的加载


jquery中load函数为一个异步加载的ajax函数

3.1此函数用于在指定位置异步加载资源(并将返回的资源填充到id为mainContentId的div中)

$("#mainContentId").load(url);

等效于:

$.get(url,function(result){
    			$("#mainContentId").html(result);
    		},"html")

3.2含有方法的加载

$("#pageId").load("doPageUI",function(){doGetObjects();});

等效于:

$("#pageId").load("doPageUI",doGetObjects);//load("请求路径",执行方法),不要写成doGetObjects();


4.change事件函数


一般与状态相关的事件用change,例如:全选checkbox对象事件注册

$("#checkAll").change(doChangeTableCheckBoxState);


5.each函数

$("#tbodyId input:checkbox")
		.each(function(){
			flag=flag&&$(this).prop("checked");
		})


6.参数形式的转换

var params={"ids":idArray.toString()};//将数组形式的参数[1,2,3]转化为{"ids":"1,2,3,4,5"}


7.树结构


在这里插入图片描述

树结构的引用方式:

1)复制包到static包下:

在这里插入图片描述

2)在需要呈现的页面上导入

<script type="text/javascript" src="bower_components/treegrid/jquery.treegrid.extension.js"></script>

<script type="text/javascript" src="bower_components/treegrid/jquery.treegrid.min.js"></script>

<script type="text/javascript" src="bower_components/treegrid/tree.table.js"></script>

3)在菜单列表页面,定义菜单列表配置信息,关键代码如下

var columns = [
{
	field : 'selectItem',
	radio : true
},
{
	title : '菜单ID',
	field : 'id',
	align : 'center',
	valign : 'middle',
	width : '80px'
},
{
	title : '菜单名称',
	field : 'name',
	align : 'center',
	valign : 'middle',
	width : '130px'
},
{
	title : '上级菜单',
	field : 'parentName',
	align : 'center',
	valign : 'middle',
	sortable : true,
	width : '100px'
},
{
	title : '类型',
	field : 'type',
	align : 'center',
	valign : 'middle',
	width : '70px',
	formatter : function(item, index) {
		if (item.type == 1) {
			return '<span class="label label-success">菜单</span>';
		}
		if (item.type == 2) {
			return '<span class="label label-warning">按钮</span>';
		}
	}
}, 
{
	title : '排序号',
	field : 'sort',
	align : 'center',
	valign : 'middle',
	sortable : true,
	width : '70px'
}, 
{
	title : '菜单URL',
	field : 'url',
	align : 'center',
	valign : 'middle',

	width : '160px'
}, 
{
	title : '授权标识',//要显示的标题名称
	field : 'permission',//json串中的key
	align : 'center',//水平居中
	valign : 'middle',//垂直居中
	sortable : false //是否排序
} ];//格式来自官方demos -->treeGrid(jquery扩展的一个网格树插件)

4)定义异步请求处理函数

unction doGetObjects(){//treeGrid

        //1.构建table对象(bootstrap框架中treeGrid插件提供)

        var treeTable=new TreeTable(

                        "menuTable",//tableId

                        "menu/doFindObjects",//url

                         columns);

        //设置从哪一列开始展开(默认是第一列)

        //treeTable.setExpandColumn(2);

        //2.初始化table对象(底层发送ajax请求获取数据)

        treeTable.init();//getJSON,get(),...

}

5.)页面加载完成,调用菜单查询对应的异步请求处理函数

$(function(){

        doGetObjects();

})


8.json格式的写法


8.1函数形式

$.getJSON(url,params,doHandleQueryResponseResult);

8.2

$.getJSON(url,params,function(result){
    		doHandleQueryResponseResult(result);
    	});

8.3源码形式:

$.ajax({
    		url:url,
    		dataType:"json",
    		data:params,
    		success:doHandleQueryResponseResult
    	 });

$.ajax底层实现:

var xhr=new XMLHttpRequest();
    	xhr.onreadystatechange=function(){
    	   if(xhr.readyState==4&&xhr.status==200){
    		   doHandleQueryResponseResult(JSON.parse(xhr.responseText));
    	   }
    	};
    	xhr.open("Get","log/doFindPageObjects?pageCurrent=1",true);
    	xhr.send(null);


9.prop函数


pro为jquery中的一个获取属性值的函数,其语法为prop(propertyName[,propertyValue]);prop为property单词缩写

prop函数中假如只有propertyName则表示取值

prop函数中假如有propertyName和propertyValue则表示为属性赋值,例如prop(“class”,“first”)

9.1取值:

$("#checkAll").prop("checked");

9.2赋值:

$("#checkAll").prop("checked",false);


10.迭代获取


10.1

for(var i=0;i<records.legnth;i++){
    		tBody.append(doCreateRows(records[i]));
    	}

10.2

records.forEach((item)=>tBody.append(doCreateRows(item)));


11.创建对象


11.1

return `<tr>
    	          <td><input type='checkbox' class='cBox' value=${item.id}></td>
    	          <td>${item.username}</td>
    	          <td>${item.operation}</td>
    	          <td>${item.method}</td>
    	          <td>${item.params}</td>
    	          <td>${item.ip}</td>
    	          <td>${item.time}</td>
    	        </tr>`;

11.2

var tds = "<td><input type='checkbox' class='cBox' name='cItem' value='"+data.id+"'>"+data.id+"</td>"
				+

				"<td>" + data.username + "</td>" +

				"<td>" + data.operation + "</td>" +

				"<td>" + data.method + "</td>" +

				"<td>" + data.params + "</td>" +

				"<td>" + data.ip + "</td>" +

				"<td>" + data.time + "</td>";

		return tds;


12.页面的初始化


1)基于Jquery框架实现

 $(".pageCurrent").html("当前页("+pageObject.pageCurrent+")");

2)原生的JS方式实现

document.querySelector(".pageCurrent").innerHTML=`当前页(${pageObject.pageCurrent})`; 


13.data函数


data函数为jquery中的一个数据存储函数,每个dom对象都有一个这样的函数;

data函数语法:data(key[,value]),key和value由自己指定;

data函数只有key时表示取值,既有key,又有value表示存储值

1)存数据

 $("#pageId").data("pageCurrent",pageObject.pageCurrent);

2)取数据

 $("#pageId").data("pageCurrent");

14.controller中跳转页码的提取:

但是优先级低

//rest 风格(一种架构风格)的url,其语法结构{变量名}/{变量}
	//@PathVariable  注解用于修饰方法参数,可以从rest风格的url中取和参数名对应的值
	@RequestMapping("{module}/{moduleUI}")

	public String doModuleUI(@PathVariable String moduleUI) {

	                return "sys/"+moduleUI;

	}



版权声明:本文为weixin_47562812原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。