struts標籤實現圖片上傳

(1)jsp代碼
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<%@ page language="java" pageEncoding="utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%@ taglib prefix= "fmt" uri= "http://java.sun.com/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>
<%@ taglib prefix="sd" uri="/struts-dojo-tags"%>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>發佈產品信息</title>
<link rel="stylesheet" type="text/css" href="../style/main.css"/>
<s:head theme="xhtml"/>
<sd:head parseContent="true" extraLocales="utf-8" />
</head>
<script type="text/javascript">
</script>

<body>
<!--
<div style="color:red">
<s:fielderror></s:fielderror>
</div>
-->
<s:form action="addProduct" method="post" theme="simple" enctype="multipart/form-data">
<div class="mainbox" style=" height : 848px;">
<div class="morearea">
<a href="<%=request.getContextPath()%>/product/addProduct.action">發佈產品信息</a>
</div>
<h1>發佈產品信息</h1>
<table border="0" cellspacing="0" cellpadding="0" class="table" bordercolor="#ccc">
<tr>
<td width="20%" align="center" bgcolor="#F6F6F6">名稱</td>
<td width="80%">
<s:textfield id="cfProduct.proTitle" name="cfProduct.proTitle" size="50"></s:textfield>
</td>
</tr>
<tr>
<td width="20%" align="center" bgcolor="#F6F6F6">型號</td>
<td width="80%">
<s:textfield id="cfProduct.proModel" name="cfProduct.proModel" size="50"></s:textfield>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">規格</td>
<td>
<s:textfield id="cfProduct.proSpec" name="cfProduct.proSpec" size="50"></s:textfield>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">品牌</td>
<td>
<s:textfield id="cfProduct.proTrademark" name="cfProduct.proTrademark" size="50"></s:textfield>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">材質</td>
<td>
<s:textfield id="cfProduct.proMaterial" name="cfProduct.proMaterial" size="50"></s:textfield>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">產地</td>
<td>
<s:textfield id="cfProduct.proOrigin" name="cfProduct.proOrigin" size="40"></s:textfield>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">類別</td>
<td>
<s:select
headerKey="noSelectClass"
headerValue="--請選擇類型--"
name="cfProduct.proClassId"
list="productclassList"
id="cfProduct.proClassId"
listKey="psId" listValue="psName"
key="cfProduct.proClassId"
/>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">圖片</td>
<td>
<s:textfield name ="caption" label ="圖片名稱" />
<s:label value="圖片名稱"></s:label>
<s:file name ="myFile" label ="瀏覽"/>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">導讀</td>
<td>
<s:textarea id="cfProduct.proNaviContent" name="cfProduct.proNaviContent" cols="80" rows="5"></s:textarea>
<font color="#ff0000">*</font>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">內容</td>
<td>
<s:textarea id="cfProduct.proContent" name="cfProduct.proContent" cols="80" rows="5"></s:textarea>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">有效期</td>
<td>
開始時間: <sd:datetimepicker language="utf-8" name="cfProduct.proBeginTime" value="today" displayFormat="yyyy-MM-dd"></sd:datetimepicker>      
結束時間: <sd:datetimepicker language="utf-8" name="cfProduct.proEndTime" value="today" displayFormat="yyyy-MM-dd"></sd:datetimepicker>
</td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">價格</td>
<td>
<s:textfield id="cfProduct.proPrice" name="cfProduct.proPrice" size="20"></s:textfield>
</td>
</tr>
</table>
<!--
<table border="0" cellspacing="0" cellpadding="0" class="table" bordercolor="#ccc">
<tr>
<th colspan="2" align="center" bgcolor="#F6F6F6">聯繫方式的確認與修改 若有誤,您發佈的信息將無法通過審覈!<a href="account_eidt.html" target="mainFrame">[修改資料]</a></th>
</tr>
<tr>
<td width="20%" align="center" bgcolor="#F6F6F6">姓名</td>
<td width="80%"><s:text name="cfCorporation.corUserName"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">公司名稱</td>
<td><s:text name="cfCorporation.corName"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">經營模式</td>
<td><s:text name="cfCorporation.corType"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">固定電話</td>
<td><s:text name="cfCorporation.corContactsPhone"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#f6f6f6">傳真號碼</td>
<td><s:text name="cfCorporation.corFax"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">移動電話</td>
<td><s:text name="cfCorporation.corContactsMobile"></s:text></td>
</tr>
<tr>
<td align="center" bgcolor="#F6F6F6">電子郵件</td>
<td><s:text name="cfCorporation.corContactsEmail"></s:text></td>
</tr>
</table>
-->
<p class="tc"><s:submit id="confirmButton" type="submit" action="addProduct" value="發佈產品"></s:submit></p>
</div>
</s:form>
</body>
</html>

(2)struts配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="product" extends="struts-default">
<action name="toAddProduct" class="productAction" method="toAddProduct">
<result>/product/product_add.jsp</result>
</action>

<action name="addProduct" class="productAction" method="addProduct">
<!--
<interceptor-ref name ="fileUpload" >
<param name ="allowedTypes" >
image/bmp,image/png,image/gif,image/jpeg,image/jpg
</param >
</interceptor-ref >
<interceptor-ref name ="defaultStack" />
-->
<result name="success" type="redirect">product/productList.action</result>
<result name="input">/product/product_add.jsp</result>
</action>

<action name="productList" class="productAction" method="listProducts">
<result>/product/product_list.jsp</result>
</action>

<action name="toUpdateProduct" class="productAction" method="toUpdateProduct">
<result name="success">/product/product_updata.jsp</result>
</action>

<action name="updateProduct" class="productAction" method="updateProduct">
<!--
<interceptor-ref name ="fileUpload" >
<param name ="allowedTypes" >
image/bmp,image/png,image/gif,image/jpeg,image/jpg
</param >
</interceptor-ref >
<interceptor-ref name ="defaultStack" />
-->
<result name="success" type="redirect">product/productList.action</result>
<result name="input">/product/product_updata.jsp</result>
</action>

<action name="startProduct" class="productAction" method="startProduct">
<result name="success" type="redirect">product/productList.action</result>
<result name="input">/product/product_list.jsp</result>
</action>

<action name="stopProduct" class="productAction" method="stopProduct">
<result name="success" type="redirect">product/productList.action</result>
<result name="input">/product/product_list.jsp</result>
</action>

<action name="toAppointPage" class="productAction" method="toAppointPage">
<result name="success">/product/product_list.jsp</result>
</action>

<action name="deleteProduct" class="productAction" method="deleteProduct">
<result name="success" type="redirect">product/productList.action</result>
<result name="input">/product/product_list.jsp</result>
</action>

</package>
</struts>

(3)Action類

/**
* <p>ProductAction</p>
*
* 版權 (c) 2009
*
* <p>CFSW</p>
*
* 文件歷史
* 日期 作者 描述
* 2009-10-09 xiangcheng.yue 創建
*
*/
package product.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import product.beans.CfProduct;
import product.beans.CfProductclass;
import product.service.ProductService;
import util.IdGenerator;

import com.opensymphony.xwork2.ActionSupport;
import common.beans.Page;
import common.util.ConstantUtil;
import common.util.PageUtil;

/**
* 產品的查看,發佈,修改,刪除的Action.
*
* @author xiangcheng.yue
* @version 1.0
*/
public class ProductAction extends ActionSupport {

private static final long serialVersionUID = 1L;

private static final int BUFFER_SIZE = 160 * 1024;
/** 產品Service。*/
private ProductService productService;
/** 產品對象。*/
private CfProduct cfProduct;
/** 企業對象。 */
//private CfCorporation cfCorporation;
/** 產品對象List。*/
private List<CfProduct> cfProducts;
/** 產品Id。*/
private String proId;
/** 產品修改頁面是否修改產品圖片標誌,"0"表示沒有修改,"1"表示修改。 */
private String updatePicFlag = "0";
/** 產品發佈及修改頁面是否修改企業信息的標誌,"0"表示沒有修改,"1"表示修改。 */
//private String updateCorporationFlag = "0";
/** 產品類型List。 */
private List<CfProductclass> productclassList;
/** 圖片對象,爲實現產品圖片的上傳及顯示。 */
//private Picture pic = new Picture();
/** 分頁對象,爲實現產品List的分頁。 */
private Page page = new Page();
/** 跳轉頁面。 */
private int goPage;
/** 爲實現產品圖片的上傳及顯示。 */
private File myFile;
private String contentType;
private String fileName;
private String imageFileName;
private String caption;


private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

public String getExtention(String fileName) {
int pos = fileName.lastIndexOf(".");
return fileName.substring(pos);
}

/**
* @since 2009-10-09
* 初始化產品List頁面,並按照條件對List進行分頁顯示。
* @return String SUCCESS 顯示產品List頁面
*/
public String listProducts() {
cfProducts = productService.findAll();
page.setEveryPage(ConstantUtil.EVERYPAGE_SIZE);
page = PageUtil.createPage(page,cfProducts.size());
goPage = 1;
cfProducts = productService.getListByPage(CfProduct.class,page);
return SUCCESS;
}

/**
* @since 2009-10-09
* 確定要發佈產品信息後,對新發布的產品的進行保存。
* @return String SUCCESS 返回產品List頁面
*/
public String toAddProduct() {
cfProduct = new CfProduct();
productclassList = productService.findSortOfCfProductsort();
return SUCCESS;
}

/**
* @since 2009-10-09
* 確定要發佈產品信息後,對新發布的產品的進行保存。
* @return String SUCCESS 返回產品List頁面
*/
public String addProduct() {
cfProduct.setProId(IdGenerator.createId());
cfProduct.setProCreatTime(new Date());
imageFileName = new Date().getTime() + getExtention(fileName);
String picURl = ServletActionContext.getServletContext().getRealPath( "/uploadimages" ) + "\\" + imageFileName;
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/uploadimages" ) + "/" + imageFileName);
copy(myFile, imageFile);
cfProduct.setProPicUrl(picURl);
productService.saveProduct(cfProduct);
return SUCCESS;
}

/**
* @since 2009-10-09
* 確定要修改產品信息後,初始化要修改的產品對象。
* @return String SUCCESS 跳轉到產品修改頁面
*/
@SuppressWarnings("unchecked")
public String toUpdateProduct() {
cfProduct = productService.findById(this.getProId());
productclassList = productService.findSortOfCfProductsort();
//cfCorporation = productService.findCfCorporationById(cfProduct.getProCorId());
return SUCCESS;
}

/**
* @since 2009-10-09
* 修改產品信息後,對修改了的產品的信息進行保存。
* @return String SUCCESS 跳轉到產品List頁面,並對該頁面進行刷新。
*/
public String updateProduct() {
if("0" == updatePicFlag){
productService.saveProduct(cfProduct);
return SUCCESS;
}
productService.updateProduct(cfProduct);
return SUCCESS;
}

/**
* @since 2009-10-09
* 確定啓用產品時,對產品的是否停用標誌位進行修改。
* @return String SUCCESS 刷新List頁面。
*/
public String startProduct() {
cfProduct = productService.findById(this.getProId());
cfProduct.setProIsLock(1);
productService.updateProduct(cfProduct);
return SUCCESS;
}

/**
* @since 2009-10-09
* 確定停用產品時,對產品的是否停用標誌位進行修改。
* @return String SUCCESS 刷新List頁面。
*/
public String stopProduct() {
cfProduct = productService.findById(this.getProId());
cfProduct.setProIsLock(0);
productService.updateProduct(cfProduct);
return SUCCESS;
}

/**
* @since 2009-10-09
* 點擊分頁標籤時到確定頁。
* @return String SUCCESS 指定確定頁的數據,並刷新List頁面。
*/
public String toAppointPage(){
page.setCurrentPage(this.goPage);
page = PageUtil.createPage(page);
cfProducts = productService.getListByPage(CfProduct.class,page);
return SUCCESS;
}


/**
* @since 2009-10-09
* 點擊產品List頁面,刪除鏈接。
* @return String SUCCESS 把要刪除的數據刪除標誌位設爲1,並刷新List頁面。
*/
public String deleteProduct(){
productService.deleteProduct(this.getProId());
return SUCCESS;
}

public void setCfProduct(CfProduct cfProduct) {
this.cfProduct = cfProduct;
}

public CfProduct getCfProduct() {
return cfProduct;
}

public List<CfProduct> getCfProducts() {
return cfProducts;
}

public void setCfProducts(List<CfProduct> cfProducts) {
this.cfProducts = cfProducts;
}

public ProductService getProductService() {
return productService;
}

public void setProductService(ProductService productService) {
this.productService = productService;
}

public String getProId() {
return proId;
}

public void setProId(String proId) {
this.proId = proId;
}

public static long getSerialVersionUID() {
return serialVersionUID;
}

public String getUpdatePicFlag() {
return updatePicFlag;
}

public void setUpdatePicFlag(String updatePicFlag) {
this.updatePicFlag = updatePicFlag;
}

public Page getPage() {
return page;
}

public void setPage(Page page) {
this.page = page;
}

public List<CfProductclass> getProductclassList() {
return productclassList;
}

public void setProductclassList(List<CfProductclass> productclassList) {
this.productclassList = productclassList;
}

public int getGoPage() {
return goPage;
}

public void setGoPage(int goPage) {
this.goPage = goPage;
}

public void setMyFileContentType(String contentType) {
this.contentType = contentType;
}

public void setMyFileFileName(String fileName) {
this.fileName = fileName;
}

public void setMyFile(File myFile) {
this.myFile = myFile;
}

public String getImageFileName() {
return imageFileName;
}

public String getCaption() {
return caption;
}

public void setCaption(String caption) {
this.caption = caption;
}

public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}

}


因爲時間關係沒怎麼仔細的分離代碼,說明文字也很少,需要參考的請仔細的查看一下。

謝謝你們,有疑問和建議請直接提。想批評直接說,但不要進行人身攻擊,呵呵。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章