<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'list.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->

<script type="text/javascript">

//点击两次可以关闭窗口
var flag=true;
function a(){
if(flag){
document.getElementById("addDiv").style.display='none';
flag=false;
}else{
document.getElementById("addDiv").style.display='block';
flag=true;
}
}

//封装了重复的代码 rul:请求的路径 methodType:请求的方式 param:参数 retnFunction:请求有返回的结果的回调函数
function sendAjax(url,methodType,param,retnFunction){
var xmlhttp=null;
//兼容所有的浏览器 创建XHR对象
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
} else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200){
retnFunction(xmlhttp.responseText);
}
}

if(methodType=="get"||methodType=="GET"){
xmlhttp.open("GET",url+"?"+param,true);
xmlhttp.send();
}else{
xmlhttp.open("POST",url,true);
//charset=UTF-8 解决乱码问题
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xmlhttp.send(param);
}
}

//查询和删除
function query() {
var foodname=document.getElementsByName("foodName")[0].value;
sendAjax("${pageContext.request.contextPath}/popo","GET","foodname="+foodname,function(responseText){
var resultJson=responseText; //返回一个json字符串
//转化为json对象 返回为一个集合
var resultObj=JSON.parse(resultJson);
//获取表格id为myTable对象
var table=document.getElementById("myTable");
//获取所有的name为dataTr的tr
var allDataTr=document.getElementsByName("dataTr");
for(var i=0;allDataTr.length;i++){
//数组是动态变化的 删了第一个 第二个会变成第一个
table.removeChild(allDataTr[0]);//防止第二次查询展示出重复的数据
}

//展示查询的结果
for(var i=0;i<resultObj.length;i++){
var obj=resultObj[i];

//获取td对象
var td=document.createElement("td");
//设值
td.innerText=obj.foodName;
var td1=document.createElement("td");
td1.innerText=obj.price;
//获取一个td对象
var td2=document.createElement("td");

//删除按钮
var ib=document.createElement("button");
ib.innerText="删除";
td2.appendChild(ib);

//修改按钮
var ib1=document.createElement("button");
ib1.innerText="修改";
td2.appendChild(ib1);

//获取tr对象
var tr=document.createElement("tr");
//把获取的对象绑定在button按钮上
ib.foodObj=obj;
//把tr绑定在button按钮上
ib.myLineTr=tr;
//删除的事件
ib.addEventListener("click",function(){
//获取当前按钮
var eventSrc=event.srcElement;
table.removeChild(eventSrc.myLineTr);

sendAjax("${pageContext.request.contextPath}/deleteFood/"+eventSrc.foodObj.foodid,"POST","_method=delete",function(responseText){
if(responseText==1){
alert("删除成功");
}else{
alert("删除失败");
}
})
});

//修改的事件
ib1.foodObj=obj;
ib1.addEventListener("click",function(){
//获取当前按钮
var eventSrc=event.srcElement;
//显示窗口
document.getElementById('updateDiv').style.display='block';
document.getElementsByName("umyFoodName")[0].value=eventSrc.foodObj.foodName;
document.getElementsByName("umyFoodPrice")[0].value=eventSrc.foodObj.price;
document.getElementsByName("umyFoodid")[0].value=eventSrc.foodObj.foodid;
});
//给tr标签设一个标识
tr.setAttribute("name","dataTr");
//在tr追加td
tr.appendChild(td);
tr.appendChild(td1);
tr.appendChild(td2);
//把tr追加到table后
table.appendChild(tr);
}
});
}

//新增
function saveFood(){
var myFoodName=document.getElementsByName("myFoodName")[0].value;
var myFoodPrice=document.getElementsByName("myFoodPrice")[0].value;
sendAjax("${pageContext.request.contextPath}/saveFood","POST","foodname="+myFoodName+"&price="+myFoodPrice,function(responseText){
if(responseText==1){
alert("新增成功");
document.getElementById('addDiv').style.display='none';
query();
}else{
alert("新增失败");
}
});
}

function updateFood(){
var umyFoodName=document.getElementsByName("umyFoodName")[0].value;
var umyFoodPrice=document.getElementsByName("umyFoodPrice")[0].value;
var umyFoodid=document.getElementsByName("umyFoodid")[0].value;

sendAjax("${pageContext.request.contextPath}/updateFood/"+umyFoodid,"POST","_method=put&foodname="+umyFoodName+"&price="+umyFoodPrice,function(responseText){
if(responseText==1){
alert("修改成功");
document.getElementById('updateDiv').style.display='none';
query();
}else{
alert("修改失败");
}
});
}
</script>

</head>

<body>
<input type="text" name="foodName">
<input type="button" value="提交" onclick="query()"> <input type="button" value="新增" onclick="a()">
</body>

<table id="myTable">
<tr><th>菜品名</th><th>菜品价格</th><th>操作</th></tr>
</table>

<!-- 新增弹出的窗口 -->
<div id="addDiv" style="display:none;position:absolute;left:40%;top:40%;z-index:100;border:1px solid black; width:200px;height:200px">
              新增<br/>
菜品名:<input type="text" name="myFoodName"/><br/>
价格:<input type="text" name="myFoodPrice"/><br/>
<input type="button" value="保存" onclick="saveFood()"/><input type="button" value="关闭" onclick="a()"/>
</div>

<!-- 修改弹出的窗口 -->
<div id="updateDiv" style="display:none;position:absolute;left:40%;top:40%;z-index:100;border:1px solid black; width:200px;height:200px">
              修改<br/>
<input type="hidden" name="umyFoodid"/>
菜品名:<input type="text" name="umyFoodName"/><br/>
价格:<input type="text" name="umyFoodPrice"/><br/>
<!-- onclick点击事件关闭窗口 -->
<input type="button" value="确定" onclick="updateFood()"/><input type="button" value="关闭" onclick="document.getElementById('updateDiv').style.display='none'"/>
</div>
</html>

cltroller层

package cn.et.springmvc.lesson06.controller;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

import net.sf.json.JSONArray;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import cn.et.springmvc.lesson06.dao.MyFoodDapImpl;

@Controller
public class MyFoodController {
@Autowired
MyFoodDapImpl mdi;
//查询
@RequestMapping(value="/popo",method=RequestMethod.GET)
public String queryFood(String foodname, OutputStream os) throws UnsupportedEncodingException, IOException{
List<Map<String, Object>> queryAllFood = mdi.queryAllFood(foodname);
JSONArray arry=JSONArray.fromObject(queryAllFood);
String j=arry.toString();
os.write(j.getBytes("UTF-8"));
return null;
}

//删除
@RequestMapping(value="/deleteFood/{foodid}",method=RequestMethod.DELETE)
public String deleteFood(@PathVariable String foodid, OutputStream os) throws UnsupportedEncodingException, IOException{
try{
mdi.deleteFood(foodid);
os.write("1".getBytes("UTF-8"));
}catch(Exception e){
os.write("0".getBytes("UTF-8"));
}
return null;
}

//修改
@RequestMapping(value="/updateFood/{foodid}",method=RequestMethod.PUT)
public String updateFood(@PathVariable String foodid,String foodname,String price, OutputStream os) throws UnsupportedEncodingException, IOException{
try{
mdi.updateFood(foodid, foodname, price);
//返回以代表成功
os.write("1".getBytes("UTF-8"));
}catch(Exception e){
//返回0代表失败
os.write("0".getBytes("UTF-8"));
}
return null;
}

//增加
@RequestMapping(value="/saveFood",method=RequestMethod.POST)
public String saveFood(String foodname,String price, OutputStream os) throws UnsupportedEncodingException, IOException{
try{
mdi.saveFood(foodname, price);
os.write("1".getBytes("UTF-8"));
}catch(Exception e){
os.write("0".getBytes("UTF-8"));
}
return null;
}
}
dao层

package cn.et.springmvc.lesson06.dao;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class MyFoodDapImpl {
@Autowired
JdbcTemplate jdbc;
public List<Map<String, Object>> queryAllFood(String foodname){
String sql="select * from food where foodName like '%"+foodname+"%'";
return jdbc.queryForList(sql);
}

public void deleteFood(String foodid){
String sql="delete from food where foodid="+foodid;
jdbc.execute(sql);
}

public void saveFood(String foodname,String price){
String sql="insert into food(foodName,price) values('"+foodname+"','"+price+"')";
jdbc.execute(sql);
}

public void updateFood(String foodid,String foodname,String price){
String sql="update food set foodName='"+foodname+"',price='"+price+"' where foodid="+foodid;
jdbc.execute(sql);
}
}

springMvc+AJAX+JSON的增删改查的更多相关文章

  1. SpringMVC之简单的增删改查示例(SSM整合)

    本篇文章主要介绍了SpringMVC之简单的增删改查示例(SSM整合),这个例子是基于SpringMVC+Spring+Mybatis实现的.有兴趣的可以了解一下. 虽然已经在做关于SpringMVC ...

  2. SpringMVC,MyBatis商品的增删改查

    一.需求 商品的增删改查 二.工程结构 三.代码 1.Mapper层 (1) ItemsMapperCustom.java package com.tony.ssm.mapper; import ja ...

  3. SpringMVC+SpringJdbc+SQLServer+EasyUI增删改查

    前言 前天用SpringJdbc连接了一把SQLServer,早上起来用SpringMVC+SpringJdbc+EasUI写了个增删改查的demo,主要是熟悉下SpringMVC相关知识点,如vie ...

  4. 基于SpringMVC的文件(增删改查)上传、下载、更新、删除

    一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...

  5. SpringMVC整合Hibernate实现增删改查之按条件查询

    首先我贴出我项目的结构,只完成了条件查询的相关代码,增删改没有写. 1.新建一个动态Web工程,导入相应jar包,编写web.xml配置文件 <context-param> <par ...

  6. JSP+Servlet+Ajax实现用户增删改查的例子

    一.数据库设计 用户表User 已有的测试数据 二.Java代码编写 Java EE的架构一般分为以下五层: ①.Domain ②.DAO ③.Service ④.Controller ⑤.View ...

  7. AJAX对数据库增删改查实例

    前端代码: <!DOCTYPE html><html><head><meta charset="UTF-8"><title&g ...

  8. asp.net中利用JSON进行增删改查中运用到的方法

    //asp.net中 利用JSON进行操作, //增加: //当点击“增加链接的时候”,弹出增加信息窗口,然后,在窗体中输入完整信息,点击提交按钮. //这里我们需要考虑这些:我会进行异步提交,使用j ...

  9. 基于springmvc、ajax,后台连接数据库的增删改查

    前言 前段时间在博客园上找了一个springmvc的例子,照着学了一下,算是对springmvc有了一个初步的了解,打一个基础,下面是链接.(我只看了博客,视频太耗时间了) 博客链接:http://w ...

随机推荐

  1. (史上最全)SNP位点与转录因子结合特异性数据库:GVATdb

    众所周知,全基因组关联分析(GWAS)发现的很多变异位点基本为非编码,这些变异位点1)要么调控基因表达(eQTL); 2)要么影响增强子活性; 3)要么影响转录因子(TF)结合特异性; 4)要么啥也不 ...

  2. 2019HDU多校 Round6

    Solved:2 02 Nonsense Time (LIS) 题意:给定一个全排列 最开始为空的 每秒中一个位置上的数出现 求每秒的LIS 题解:题解说 考虑时光倒流 倒着消掉 因为数据随机 所以期 ...

  3. 无所不能的Embedding6 - 跨入Transformer时代~模型详解&代码实现

    上一章我们聊了聊quick-thought通过干掉decoder加快训练, CNN-LSTM用CNN作为Encoder并行计算来提速等方法,这一章看看抛开CNN和RNN,transformer是如何只 ...

  4. smartbits国产版本minismb –快速安装上手指南

    Minismb测试仪表是复刻smartbits的国产版本,是一款专门用于测试智能路由器,网络交换机的性能和稳定性的软硬件相结合的工具.可以通过此工具测试任何ip网络设备的端口吞吐率,带宽,并发连接数和 ...

  5. 超易懂!原来SOLID原则要这么理解!

    说到 SOLID 原则,相信有过几年工作经验的朋友都有个大概印象,但就是不知道它具体是什么.甚至有些工作了十几年的朋友,它们对 SOLID 原则的理解也停留在表面.今天我们就来聊聊 SOLID 原则以 ...

  6. K8S(02)管理核心资源的三种基本方法

    系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 管理k8s核心资源的三种基本方法: 目录 系列 ...

  7. Gitlab忘记root用户密码解决办法

    一.Gitlab忘记root用户密码,重置用户密码和查看用户ID号方法  1.Gitlab查看用户id号的方法1)方法1:通过api接口查询接口查询地址:http://gitlab的url/api/v ...

  8. VS2010下如何查看类的内存布局

    用VS2010查看类的内存布局,这里用两种方法 (1)MSVC有个隐藏的"/d1"开关,通过这个开关可以查看项目中类的内存布局情况. 修改项目属性,添加"/d1 repo ...

  9. Linux 驱动框架---linux 驱动

    总述 Linux 系统下的驱动最后都是以如下这个结构体呈现在系统中的,注意其中的dev_pm_ops是内核新增的内容来准备替换platform_driver中的电源管理相关的内容.这里内容是先进行总体 ...

  10. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...