他虽然提示那几行有问题 但是 但是 我看了没错

他虽然提示那几行有问题 但是 但是 我看了没错

package com.imooc.web.action;

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

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.imooc.domain.Category;
import com.imooc.domain.Product;
import com.imooc.service.CategoryService;
import com.imooc.service.ProductService;
import com.imooc.service.impl.CategoryServiceImpl;
import com.imooc.service.impl.ProductServiceImpl;
import com.imooc.utils.UploadUtils;

/**
 * Servlet implementation class ProductServlet
 */
@WebServlet("/ProductServlet")
public class ProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收method参数
		String methodName = request.getParameter("method");
		if("findAll".equals(methodName)) {
			findAll(request,response);
		}else if("saveUI".equals(methodName)) {
			saveUI(request,response); //在下方创建方法
		}else if("save".equals(methodName)) {
			save(request,response); //在下方创建方法
		}
		
		
		
	}///////////////////////////////////////////////////////////

	
	/**
	 * 商品模块  后台保存商品方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void save(HttpServletRequest request, HttpServletResponse response) throws IOException {
		System.out.println("后台保存商品save!!!");
		//完成文件上传    工具类
		//调用工具类  抛出异常  在工具类中封装到map中去了   数据都在map中
		Map<String,String> map= UploadUtils.uploadFile(request);
		//将数据完成封装   保存商品到数据库
		Product product = new Product();
		product.setPname(map.get("pname"));
		product.setAuthor(map.get("author"));
		product.setPrice(Double.parseDouble(map.get("price")));
		product.setDescription(map.get("description"));
		product.setFilename(map.get("filename"));
		product.setPath(map.get("path"));
		
		//往数据库里保存知道id就行了
		product.getCategory().setCid(Integer.parseInt(map.get("cid")));
		
		
		//处理数据
		ProductService productService = new ProductServiceImpl();
		productService.save(product);
		
		//页面跳转
		response.sendRedirect(request.getContextPath()+"/ProductServlet?method=findAll");
	}

	/**
	 * 商品模块  跳转到添加页面方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//查询所有分类信息  引入两个包
		CategoryService categoryService = new CategoryServiceImpl();
		//调用方法  拿到了所有分类数据
		List<Category> list = categoryService.findAll();
		// 页面跳转  带着list集合数据  存到 setAttribute中
		request.setAttribute("categoryList",list );
		//重定向  抛异常
		request.getRequestDispatcher("/admin/product_add.jsp").forward(request, response);
		
	}

	/**
	 * 商品模块  查询所有商品的方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 不接收参数
		System.out.println("ProductServlet的findAll方法执行了!");
		//调用业务层数据  导入两个包
		ProductService productService = new ProductServiceImpl();
		//再引入包
		List<Product> list = productService.findAll();
		
		//遍历打印
//		for(Product product:list) {
//			System.out.println(product);
//		}
		//页面跳转
		request.setAttribute("list", list);
		request.getRequestDispatcher("/admin/product_list.jsp").forward(request, response);
		
		
		
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

http://img1.sycdn.imooc.com//climg/5dcd067109dd044919761269.jpg希望老师 指点是哪里? 可能会有错 希望详细说明 比如 哪个文件的大概哪行!!!务必 多说几个疑似的地地方     并 说明  如何改正 !!!谢谢

正在回答

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

1回答

同学你好。

1、分析错误信息:NumberFormatException: null 代表发生了数字转换(number format)问题,不能将null转换为数字。发生转换数字的方法是Integer的parseInt,并且在自己的代码中调用的位置是ProjectServlet的67行:

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

2、找到代码中的对应位置,可以看到这里使用了parseInt,说明map.get("cid")得到的是null。而map是UploadUtils.uploadFile(request)获取的。同学可以检查下uploadFile这个方法的返回值是否有问题。另外注意对应的html页面的input标签的name属性是否是"cid"

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


3、另外,同学刚刚new出的Product。如果在product.getCategory()方法中没有判断当前的category属性是否初始化,那么就会返回null。而后会产生空指针异常。建议同学在这里先new出来Category对象,将需要的属性值都填写后,再将整个对象放入product中,例如:

        //将数据完成封装   保存商品到数据库
        Product product = new Product();
        product.setPname(map.get("pname"));
        product.setAuthor(map.get("author"));
        product.setPrice(Double.parseDouble(map.get("price")));
        product.setDescription(map.get("description"));
        product.setFilename(map.get("filename"));
        product.setPath(map.get("path"));
         
        //-----先创建Category对象,将属性填充好
        Category category = new Category();
        category.setCid(Integer.parseInt(map.get("cid")));
        //-----然后将整个对象设置成category属性
        product.setCategory(category);
         
        //处理数据
        ProductService productService = new ProductServiceImpl();
        productService.save(product);


如果解答了同学的疑问,望采纳~

祝学习愉快~

  • LLLL_ 提问者 #1
    还是不行 检查返回值是map 然后 下边的也改了!!! 希望老师再想想看 谢谢
    2019-11-14 17:38:42
  • LLLL_ 提问者 #2
    找到问题原因了 出错的地方在jsp 虽然写了cid 但是写错了位置
    2019-11-14 18:00:00
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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