一:添加新商品
商品除了名称还有有分类和照片什么,先说上传照片
商品实例中持有一个上传图片的实例:
public class UploadFile implements Serializable{ private static final long serialVersionUID = 1L; // 编号 private Integer id; // 文件路径 private String path;
public class ProductInfo implements Serializable { private static final long serialVersionUID = 1L; private Integer id;// 商品编号 private String name;// 商品名称 private String description;// 商品说明 private Date createTime = new Date();// 上架时间 private Float baseprice;// 商品采购价格 private Float marketprice;// 现在市场价格 private Float sellprice;// 商城销售价格 private Sex sexrequest;// 所属性别 private Boolean commend = false;// 是否是推荐商品(默认值为false) private Integer clickcount = 1;// 访问量(统计受欢迎的程度) private Integer sellCount = 0;// 销售数量(统计热销商品) private ProductCategory category;// 所属类别 private UploadFile uploadFile;// 上传文件
关系设置在protectInfo这端 :
<many-to-one name="uploadFile" unique="true" cascade="all" lazy="false"/>
1.前台上传
(这个方法不如在struts.xml配置上传参数好, 那里边能配置更多对于上传的限制)
<s:form action="product_save" namespace="/admin/product" enctype="multipart/form-data" method="post">
<td><s:file id="file" name="file"></s:file></td>
2.后台保存
public String save() throws Exception{ if(file != null ){//如果文件路径不为空 //获取服务器的绝对路径 String path = ServletActionContext.getServletContext().getRealPath("/upload"); File dir = new File(path); if(!dir.exists()){//如果文件夹不存在 dir.mkdir();//创建文件夹 } String fileName = StringUitl.getStringTime() + ".jpg";//自定义图片名称 FileInputStream fis = null;//输入流 FileOutputStream fos = null;//输出流 try { fis = new FileInputStream(file);//根据上传文件创建InputStream实例 fos = new FileOutputStream(new File(dir,fileName)); //创建写入服务器地址的输出流对象 byte[] bs = new byte[1024 * 4]; //创建字节数组实例 int len = -1; while((len = fis.read(bs)) != -1){//循环读取文件 fos.write(bs, 0, len);//向指定的文件夹中写数据 } UploadFile uploadFile = new UploadFile();//实例化对象 uploadFile.setPath(fileName);//设置文件名称 product.setUploadFile(uploadFile);//设置上传路径 } catch (Exception e) { e.printStackTrace(); }finally{ fos.flush(); fos.close(); fis.close(); } }
//如果商品类别和商品类别ID不为空,则保存商品类别信息 if(product.getCategory() != null && product.getCategory().getId() != null){ product.setCategory(categoryDao.load(product.getCategory().getId())); } //如果上传文件和上传文件ID不为空,则保存文件的上传路径信息 if(product.getUploadFile() != null && product.getUploadFile().getId() != null){ product.setUploadFile(uploadFileDao.load(product.getUploadFile().getId())); } productDao.saveOrUpdate(product);//保存商品信息 return list();
3.显示:
<s:a action="product_select" namespace="/product" > <s:param name="id" value="id"></s:param> <img width="150" height="150" src="<s:property value="#request.get('javax.servlet.forward.context_path')"/>/upload/<s:property value="uploadFile.path"/>"> </s:a>
二:删改
改还是用上边的save()方法,没什么区别
删就直接去删掉protectInfo实例, 因为有级联的关联 所以就把图片也一起删掉了