一:添加新商品
商品除了名称还有有分类和照片什么,先说上传照片
商品实例中持有一个上传图片的实例:
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实例, 因为有级联的关联 所以就把图片也一起删掉了