SelectBookServlet里为什么取不到showBooks.jsp里的查询参数?

SelectBookServlet里为什么取不到showBooks.jsp里的查询参数?

<%@page import="com.shenjw.domain.Book"%>

<%@page import="java.util.List"%>

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

    pageEncoding="UTF-8"%>

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

<%

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

/* List<Book> books = (List<Book>)session.getAttribute("books"); */

%>

<%

String path = request.getContextPath();


String basePath = request.getScheme() + "://"


+ request.getServerName() + ":" + request.getServerPort()


+ path;

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<base href="<%=basePath%>">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>图书查询</title>

<script type="text/javascript" src="<%=basePath%>/resources/js/jquery-1.4.2.js"></script>

<script type="text/javascript">

var flag = "<%=addFlag %>"

if("1"==addFlag){

alert("添加成功!")

}

</script>

</head>

<body>

<center>

<h1>图书查询</h1>

<p>

图书ID:<input type="text" name="bookID">

图书名:<input type="text" name="bookName">

分类:<input type="text" name="categoryName">

<input type="button" value="查询" id="search">

</p>

<hr>

<table width="800px" cellspacing="0px" cellpadding="0px" border="1px">

<thead>

<tr>

<th>图书ID</th>

<th>书名</th>

<th>分类</th>

<th>价格</th>

<th>描述</th>

</tr>

</thead>

<tbody id="cont">

<c:forEach items="${books }" var="book">

<tr>

<td>${book.getBookId() }</td>

<td>${book.getBookName() }</td>

<td>${book.getBookCategory() }</td>

<td>${book.getPrice() }</td>

<td>${book.getDescription() }</td>

</tr>

</c:forEach>

</tbody>

</table>

</center>

<script type="text/javascript">

/* 根据条件查询*/

$("#search").click(function(){

$.ajax({

url:"<%=basePath%>/SelectBookServlet",

type:"post",

dataType:"json",

success:function(result){

var list = eval(result);

var content=null;

for(var i in list){

var id = list[i].bookId;

var bookName = list[i].bookName;

var bookCategory = list[i].bookCategory;

var price = list[i].price;

var description = list[i].description;

content = content+"<tr><td>"+id+"</td><td>"+bookName+"</td><td>"

+bookCategory+"</td><td>"+price+"</td><td>"+description+"</td></tr>";

$("#cont>tr").remove();

}

$("#cont").html(content);

}

});

});

</script>

</body>

</html>

package com.shenjw.servlet;


import java.io.IOException;

import java.util.List;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


import org.json.JSONArray;


import com.shenjw.domain.Book;

import com.shenjw.service.LibServiceImpl;


/**

 * 图书查询Servlet

 */

public class SelectBookServlet extends HttpServlet {

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

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

//1、获取ajax传递过来的参数信息

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

// 获取查询信息

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

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

String category = request.getParameter("categoryName");

LibServiceImpl libServiceImpl = (LibServiceImpl) this.getServletContext().getAttribute("libServiceImpl");

List<Book> list = libServiceImpl.getBooksByCondition(id,bookName,category);

System.out.println(id+" "+bookName+" "+category);

System.out.println(list);

//创建JSONArray对象,将list存进去

JSONArray jsonArray = new JSONArray(list);

//将数组传递会页面

response.getOutputStream().write(jsonArray.toString().getBytes("utf-8"));

}


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

doGet(request, response);

}


}


正在回答

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

4回答

你的数据应该是没有进行传递,在Ajax中,增加一个data项:

data : {
bookID : $("input[name=bookID]").val(),
bookName : $("input[name=bookName]").val(),
catgoryName : $("input[name=catgoryName]").val()
},

增加以后再试下~~

如果解决了你的疑惑,请采纳,祝学习愉快!

  • 北斗神拳1984 提问者 #1
    可以取到查询信息了,但是查询不出图书,是我的getBooksByCondition方法有问题吗? package com.shenjw.dao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.shenjw.domain.Book; import com.shenjw.domain.User; //数据处理类 public class LibDaoImpl { private static final List<User> userDb = new ArrayList<User>();//用户表 private static final List<Map<String,Object>> bookCategoryDb = new ArrayList<Map<String,Object>>();//图书分类 private static final List<Book> books = new ArrayList<Book>();//图书表 // 用户注册方法 // 用户登录方法 public int login(String username,String password) { for (User user : userDb) { if (user.getUserName().equals(username)&&user.getPassword().equals(password)) { return 1; } } return 0; } // 判断指定的用户名在数据库中是否存在 // 添加图书分类方法 public void addBookCategory(Long id,String categoryName,String description) { Map<String,Object> category = new HashMap<String,Object>(); category.put("id",id); category.put("categoryName",categoryName); category.put("description",description); bookCategoryDb.add(category); } public List<Book> getBooks(){ return books; } // 根据条件来查询数据信息 public List<Book> getBooksByCondition(String bookID,String bookName,String category){ List<Book> list=new ArrayList<Book>(); for(Book book:books) { if ((book.getBookId()).equals(bookID)||(book.getBookName()).equals(bookName)||(book.getBookCategory()).equals(category)) { list.add(book); } } return list; } }
    2018-05-02 11:36:52
提问者 北斗神拳1984 2018-05-02 16:54:46

package com.shenjw.service;


import java.util.List;

import java.util.Map;


import com.shenjw.dao.LibDaoImpl;

import com.shenjw.domain.Book;

import com.shenjw.domain.User;


public class LibServiceImpl {

LibDaoImpl libDaoImpl = new LibDaoImpl();

// 用户注册

public void regist(User user) {

libDaoImpl.regist(user);

}

// 用户登录

public int login(String username,String password) {

return libDaoImpl.login(username, password);

}

// 判断指定的用户名在数据库中是否存在

public int isUserExist(String username) {

return libDaoImpl.isUserExist(username);

}

// 添加图书分类

public void addBookCategory(Long id,String categoryName,String description) {

libDaoImpl.addBookCategory(id, categoryName, description);

}

//获取图书分类

public List<Map<String, Object>> getCategory(){

return libDaoImpl.getCategory();

}

// 根据条件来查询书籍信息

public List<Book> getBooksByCondition(String bookID,String bookName,String category){

return libDaoImpl.getBooksByCondition(bookID, bookName, category);

}

//获取图书列表

public List<Book> getBooks(){

return libDaoImpl.getBooks();

}

}


  • 在所有代码里都没有找到如何添加图书的,DAO中也只有添加分类的方法,你确认一下添加完数据后 libServiceImpl里面有数据吗,可以把集合取出来显示一下
    2018-05-02 18:46:33
提问者 北斗神拳1984 2018-05-02 14:58:55

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

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

控制台可以打印出System.out.println(id+" "+bookName+" "+category);

但是打印System.out.println(list);就是空的。

  • 把Service类贴出来看看,看一下 libServiceImpl里面的数据
    2018-05-02 16:52:47
提问者 北斗神拳1984 2018-05-02 12:57:02

package com.shenjw.dao;


import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


import com.shenjw.domain.Book;

import com.shenjw.domain.User;


//数据处理类



public class LibDaoImpl {

private static final List<User> userDb = new ArrayList<User>();//用户表

private static final List<Map<String,Object>> bookCategoryDb = new ArrayList<Map<String,Object>>();//图书分类

private static final List<Book> books = new ArrayList<Book>();//图书表

// 用户注册方法

public void regist(User user) {

userDb.add(user);

}

// 用户登录方法

public int login(String username,String password) {

for (User user : userDb) {

if (user.getUserName().equals(username)&&user.getPassword().equals(password)) {

return 1;

}

}

return 0;

}

// 判断指定的用户名在数据库中是否存在

public int isUserExist(String username) {

for(User user:userDb) {

if (user.getUserName().equals(username)) {

return 1;

}

}

return 0;

}

// 添加图书分类方法

public void addBookCategory(Long id,String categoryName,String description) {

Map<String,Object> category = new HashMap<String,Object>();

category.put("id",id);

category.put("categoryName",categoryName);

category.put("description",description);

bookCategoryDb.add(category);

}

public List<Map<String, Object>> getCategory(){

return bookCategoryDb;

}

public List<Book> getBooks(){

return books;

}

// 根据条件来查询数据信息

public List<Book> getBooksByCondition(String bookID,String bookName,String category){

List<Book> list=new ArrayList<Book>();

for(Book book:books) {

if ((book.getBookId()).equals(bookID)||(book.getBookName()).equals(bookName)||(book.getBookCategory()).equals(category)) {

list.add(book);

}

}

return list;

}

}

是我这个方法写的有错吗?

  • 这个方法从逻辑上看没什么问题,你说的”可以取到查询信息了,但是查询不出图书“,可以查询到什么信息了,不是图书信息吗?另外,在哪里能查询到信息了,这些都描述一下吧 ,最后能贴一下截图,还有你已经改好的代码和service代码也贴一下,我们整体运行一下看看
    2018-05-02 14:49:17
  • 提问者 北斗神拳1984 回复 好帮手慕珊 #2
    确实是没有添加图书的方法,我仔细看了一下作业要求里没有明确写添加图书的方法,所以自己也忘记写了。
    2018-05-02 21:31:20
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10204    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

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