他虽然提示那几行有问题 但是 但是 我看了没错
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);
}
}
希望老师 指点是哪里? 可能会有错 希望详细说明 比如 哪个文件的大概哪行!!!务必 多说几个疑似的地地方 并 说明 如何改正 !!!谢谢
6
收起
正在回答
1回答
同学你好。
1、分析错误信息:NumberFormatException: null 代表发生了数字转换(number format)问题,不能将null转换为数字。发生转换数字的方法是Integer的parseInt,并且在自己的代码中调用的位置是ProjectServlet的67行:

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

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);如果解答了同学的疑问,望采纳~
祝学习愉快~
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星