新增分类点击删除后 ,全局变量categoryList并没变化,点击刷新后不应该是没删除前的数据吗

新增分类点击删除后 ,全局变量categoryList并没变化,点击刷新后不应该是没删除前的数据吗

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>

<html>

<head>

<title>图书管理系统</title>

<script type="text/javascript">

</script>

</head>

<link rel="stylesheet" type="text/css" href="css/index.css">

<script type="text/javascript" src="js/index.js" defer="true"></script>

<script type="text/javascript" src="js/jQuery.js"></script>

<script type="text/javascript">

function del(s){

var s=s.id;

alert(s);

$("#table tr:not(:first)").html("");

$(function(){

$.ajax({

"url":"/ManageSystem/delcategory",

"type":"get",

"data":{id:s},

"dataType":"json",

"success":function(json){

for(var i=0;i<json.length;i++){

var s=i+1;

var vtd=$("<tr>"+"<td>"+s+"</td>"+"<td>"+json[i].cgid+ "</td>"+"<td>"+json[i].cgname+"</td>"+"<td>"+"<input type='button' onclick='del(this)' id="+json[i].cgid+" value='删除' >"+"</td>"+"</tr>")                

$("#table").append(vtd);

}

},


})


})


}

</script>

<body>


<div class="head">

<input type="button" onclick="location.href='http://localhost:8080/ManageSystem/index.jsp'" value="分类管理" name="">

<input type="button" onclick="location.href='http://localhost:8080/ManageSystem/msbook.jsp'"  value="图书信息管理" name="">

</div>

<div class="banner">

<span class="f1">图书管理系统</span></br>

<span class="f2">图书分类管理</span>

</div>

<div class="searche">

<input type="text" id="" name="" placeholder="请输入要查询的分类">

<input type="button" name="" value="查询">

</div>

<div class="main">

<table name="tb" id="table" >


   <tr class="trname">

    <td class="tdname">序号</td>

    <td class="tdname">分类编号</td>

    <td class="tdname">分类名称</td>

    <td class="tdname">操作</td>

   </tr>

   


   

   <c:forEach  items="${applicationScope.categoryList}"  var="c" varStatus="indx"  >

    <tr class="trname">

    <td class="tdname" name="tdnum">${indx.index+1}</td>

    <td class="tdname" name="tdid">${c.cgid}</td>

    <td class="tdname" name="tdname">${c.cgname}</td>

    <td class="tdname" name="tddel"><input type="button" onclick="del(this)" value="删除" id="${c.cgid}"></td>


   </tr>

   

   </c:forEach>


</table>


</div>

<div class="add">

<a href="${pageContext.request.contextPath}/newclass.jsp"><input type="button"  id="createbtn" name="" value="新建"></a>

</div>



</body>

</html>


package com.system.mianservlet;


import java.io.IOException;

import java.util.ArrayList;

import java.util.List;


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 com.system.categoryserviceImpl.CategoryServiceImpl;


/**

 * Servlet implementation class CreateClServlet

 */

@WebServlet("/createclass")

public class AddCategoryServlet extends HttpServlet {

private static final long serialVersionUID = 1L;


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {


List categoryList=new ArrayList();

String id=request.getParameter("id");

String classname=request.getParameter("classname");

if(id=="") {

CategoryServiceImpl cGsi=new CategoryServiceImpl();

categoryList=cGsi.getCategorList();

//request.setAttribute("categoryList", categoryList);

request.getServletContext().setAttribute("categoryList", categoryList);

//request.getSession().setAttribute("categoryList", categoryList);

System.out.println(categoryList);

response.sendRedirect("/ManageSystem/index.jsp");

//request.getRequestDispatcher("/index.jsp").forward(request, response);

}else {

CategoryServiceImpl cGsi=new CategoryServiceImpl();

cGsi.addCatgory(id, classname);

categoryList=cGsi.getCategorList();

request.getServletContext().setAttribute("categoryList", categoryList);

  // request.setAttribute("categoryList", categoryList);

//request.getSession().setAttribute("categoryList", categoryList);

System.out.println(categoryList);

// request.getRequestDispatcher("/index.jsp").forward(request, response);

response.sendRedirect("/ManageSystem/index.jsp");

}

}


/**

* @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);

}


}

package com.system.mianservlet;


import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

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 com.alibaba.fastjson.JSON;


import com.system.categoryserviceImpl.CategoryServiceImpl;


/**

 * Servlet implementation class DelCategory

 */

@WebServlet("/delcategory")

public class DelCategory extends HttpServlet {

private static final long serialVersionUID = 1L;


/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String id=(String)request.getParameter("id");

System.out.println(id);

List ctList=new ArrayList();

CategoryServiceImpl ctg=new CategoryServiceImpl();

ctg.deleteCatgory(id);

ctList=(List)ctg.getCategorList();

System.out.println("删除后的数据"+ctList);

// request.getServletContext().setAttribute("categoryList", ctList);

String json=JSON.toJSONString(ctList);

response.getWriter().println(json);

}


/**

* @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);

}


}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕阿满 2020-08-19 18:44:07

同学你好,同学理解的不正确,在createclass中,是从CategoryServiceImpl类中获取数据存入servletContext中,如:

http://img1.sycdn.imooc.com//climg/5f3d00be09d1712606700187.jpg

servletContext中存入的是一个对象的引用,具体指向CategoryServiceImpl类中数据,所以当CategoryServiceImpl类中的数据改变时,servletContext中的数据也发生了改变。

举例说明一下:

http://img1.sycdn.imooc.com//climg/5f3d01d6095edc4c11920529.jpg


上边代码中,list集合添加aaa,bbb两个数据,将集合存入servletContext中,获取数据并循环输出。

然后再向集合中添加ccc数据,直接获取servletContext中的数据进行输出,结果如下:

http://img1.sycdn.imooc.com//climg/5f3d022809c6dce502220079.jpg

也就是说servletContext中存放的list集合的引用,当list集合发生变化时,servletContext中的数据也发生变化。

所以刷新后获取的删除后的数据,而不是新增后未删除的数据。

祝:学习愉快~

好帮手慕阿满 2020-08-19 15:56:29

同学你好,同学刷新页面时的访问路径是什么,是否访问createclass?

如果是访问createclass,如下所示,是获取CategoryServiceImpl中的categoryList,存入ServletContext,并转发到页面显示,如:

http://img1.sycdn.imooc.com//climg/5f3cda9d090f79bc06820488.jpg

删除时,将CategoryServiceImpl中的某个数据进行删除,如:

http://img1.sycdn.imooc.com//climg/5f3cdaf109d2350507740447.jpg

所以刷新获取的是删除的数据,而不是未删除的数据。

祝:学习愉快~

  • 提问者 大圣归来² #1
    package com.system.bookserviceImpl; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.system.book.Book; import com.sysytem.bookservice.BookService; public class BookServiceImpl implements BookService { private static final List<Book> bookList=new <Book>ArrayList(); @Override public void addBook(Book book) { // TODO Auto-generated method stub bookList.add(book); } @Override public void updateBook(Book book) { // TODO Auto-generated method stub } @Override public Book getBookById(String bookId) { Book book=null; // TODO Auto-generated method stub for(Book lb:bookList) { if(lb.getBkID().equals(bookId)) { book=lb; } } return book; } @Override public List<Book> getBookByCategoryName(String bookName) { List<Book> bkList=new ArrayList<Book>(); Book book=null; System.out.println("查询到:"+bookList); for(Book lb:bookList) { if(lb.getBkCat().equals(bookName)) { bkList.add(lb); System.out.println("查询到:"+lb); } } return bkList; } @Override public void deleteBook(String bookId) { // TODO Auto-generated method stub Iterator<Book> it=bookList.iterator(); while(it.hasNext()) { Book bookIt=it.next(); if(bookIt.getBkID().equals(bookId)) { it.remove(); } } } public static List<Book> getBooklist() { return bookList; } }
    2020-08-19 17:51:49
  • 提问者 大圣归来² #2
    刷新页面是重新访问index.jsp,此时获取全局变量${applicationScope.categoryList},如果没有新建,${applicationScope.categoryList},获取的应该是空,点击新建后访问/createclass,创建生成全局变量categoryList,赋值进去了。此时点击删除,显示的是从BookServiceImpl中获取的删除后,bookList数组进行局部刷新显示,当点击刷新当前页面后,不是应该显示全局变量categoryList的数组吗?可以这样理解吗?
    2020-08-19 17:58:06
好帮手慕阿满 2020-08-19 10:16:01

同学你好,不是很理解同学的意思。同学是指新增分类后,又将新增的分类删除,全局的categoryList没有变化吗?这是正常的,新增分类后又删除,相当于没有新增,显示的是未新增的的categoryList,而不是新增后未删除的categoryList。

如果不是这个意思,请同学详细描述一下。

祝:学习愉快~

  • 提问者 大圣归来² #1
    点击删除,采用的是ajax向/ManageSystem/delcategory发送请求,获取json在当前 页面显示,实际上全局的categoryList没有变化,点击刷新当前页面或者重新访问index.jsp,获取的是全局的categoryList在当前页面显示,显示的数据应该是没删除之前的才对,可实际上却是删除后的数据,请问这是为什么?
    2020-08-19 11:42:32
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师