Struts2文件上传进度条,该怎么解决

Struts2文件上传进度条
我按照网上大神们的做法,一步步实现的,可是为什么总是不能成功呢。那么要是有兴趣也试试看啊。
下面我贴出原文:
   原理:
     利用Ajax在客户端一直查询服务器端的上传进度,取得进度的状态文本信息(xml,json格式的文本等),然后利用JS解析,显示在前台。
     在Struts2. 0中,框架事先已经定义一种监听器:ProgressListener(进度监听器),里面有一个update(long readedBytes, long totalBytes, int currentItem)方法,其中,readedBytes是已经上传到服务器的位数,而totalBytes是上传文件总位数.当文件已二进制的方式上传时,每上传一部分数据,就会调用这个方法一次。故要实现监听进度,必须实现这个接口,并实现update方法,在update方法中保存这个进度到session。当客服端需要进度的信息时,只需要访问某个action,在这个action中读取session中保存的进度状态就可以了.
   上传文件可大致分为两个阶段:1. 上传到服务器上,在临时目录中 2.从临时目录中把文件移到指定目录(由自己写的action处理),而struts2.的监听器只监听第一阶段。
   
实现:
(源代码下载: http://download.csdn.net/source/3568014)
第一步:
    实现ProgressListener接口,实现update( )方法,详情见action包中的FileUploadListener.java 文件,里面有一个自定义的类:State ,它描述的是进度的状态,详情请看State注释。Update方法要做的就是不断地更新session中的state对象 代码如
 

  8. public class FileUploadListener implements ProgressListener{  
9.     private HttpSession session;  
10.       
11.     public FileUploadListener(HttpServletRequest request) {  
12.            session = request.getSession();  
13.            State state = new State();  
14.            session.setAttribute("state", state);  
15.     }  
16.     @Override  
17.     public void update(long readedBytes, long totalBytes, int currentItem) {  
18.         // TODO Auto-generated method stub  
19.            System.out.println("update:"+readedBytes+";"+totalBytes+";"+currentItem);  
20.              
21.            State state = (State) session.getAttribute("state");  
22.              
23.            state.setReadedBytes(readedBytes);  
24.            state.setTotalBytes(totalBytes);  
25.            state.setCurrentItem(currentItem);  
26.     }  
27. }  
 

State类:

  3. public class State {  
4.     private long readedBytes = 0L;/*已经上传的位数*/  
5.     private long totalBytes = 0L;/*文件所占位数*/  
6.     private int currentItem = 0;  
7.     private int rate=0; /*上传百分比*/  
8.     public long getReadedBytes() {  
9.         return readedBytes;  
10.     }  
11.       
12.     public void setReadedBytes(long readedBytes) {  
13.         this.readedBytes = readedBytes;  
14.     }  
15.       
16.     public long getTotalBytes() {  
17.         return totalBytes;  
18.     }  
19.       
20.     public void setTotalBytes(long totalBytes) {  
21.         this.totalBytes = totalBytes;  
22.     }  
23.     public int getCurrentItem() {  
24.         return currentItem;  
25.     }  
26.       
27.     public void setCurrentItem(int currentItem) {  
28.         this.currentItem = currentItem;  
29.     }  
30.   
31.     public int getRate() {  
32.         return rate;  
33.     }  
34.     public void setRate(int rate) {  
35.         this.rate = rate;  
36.     }     
37. }  



第二步:
   将监听器注入到struts2.0的MultiPartRequest封装类中,客户端发送request到服务器,struts2.0会将request封装成MultiPartRequest。因此必须将监听器注入到MultiPartRequest中。只需要在MultiPartRequest中加入以下两句:
 
FileUploadListener progressListener = new FileUploadListener(servletRequest);
upload.setProgressListener(progressListener);//添加自己的监听器
 
所以重新写一个新类MyMultiPartRequest代替MultiPartRequest ,代码与org.apache.struts2.dispatcher.multipart.MultiPartRequest 一样,在方法
private List<FileItem> parseRequest(HttpServletRequest servletRequest, String saveDir)  中加入监听器.

------解决思路----------------------
xml指定自己的文件上传解析类有错误
<constant name="struts.multipart.parser" value="requestParser" /> 

------解决思路----------------------
请教,如果多文件上传,如何给每个上传的文件一个进度条,又如果总进度给个进度条呢?Struts2文件上传进度条,该怎么解决