当前位置: 代码迷 >> Java Web开发 >> richFaces 4,3,2 rich:fileUpload,该如何解决
  详细解决方案

richFaces 4,3,2 rich:fileUpload,该如何解决

热度:1005   发布时间:2016-04-13 22:14:50.0
richFaces 4,3,2 rich:fileUpload
上传页面:

uploadListener方法:
public void uploadListener(FileUploadEvent event) {

UploadedFile item = event.getUploadedFile();
List<DirExpBudget> tmpList = new ArrayList<DirExpBudget>();
setListDirExpBudget(new ArrayList<DirExpBudget>());
try {
Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(item.getInputStream());
} catch (BiffException e) {
procException(e, "得到Excel");
return;
} catch (IOException e) {
procException(e, "得到Excel");
return;
}

Sheet[] sheets = workbook.getSheets(); // 获取所有sheet页
                        for (int n = 0; n < sheets.length; n++) {

Sheet sheet = sheets[n];
int row = sheet.getRows(); // 获取信息总行数

if (sheet.getCell(0, 1).getContents().split(":").length <= 1) {
setAlertMessage("第" + (n + 1) + "个sheet页,部门名称不存在,请检查!");
return;
}

String bmmc = sheet.getCell(0, 1).getContents().split(":")[1]
.trim(); // 获取部门名称

String conditionDept = " entity.deptName = '" + bmmc
+ "' AND entity.deptType = '01'";

if (sheet.getCell(6, 1).getContents().split(":").length <= 1) {
setAlertMessage("第" + (n + 1) + "个sheet页,科目名称不存在,请检查!");
return;
}
                                  .......
                                for (int j = 5; j < row; j++) { // j 行
                                        dirExpBudget = new DirExpBudget();
                                        ......
                                 tmpList.add(dirExpBudget);
}
                                }
} catch (NumberFormatException e) {
procException(e, "导入");
return;
}
                if (tmpList == null || tmpList.size() == 0) {
return;
}

getListDirExpBudget().addAll(tmpList);
                }
当导入的Excel超过10个sheet页时,导入页面显示如下:

检查Console中,好像执行了两遍 uploadListener这个方法。
跪求大神 指点!!!!!
------解决思路----------------------
uploadListener 这是用的观察者模式。
rich:messages 会在页面中显示所有消息:
<rich:popupPanel id="messagePopup" left="500" top="20" show="true" modal="false" >
        <rich:messages id="mess" />
    </rich:popupPanel>


你加上特定组件试试:
FacesContext faceContext = FacesContext.getCurrentInstance();
          FacesMessage facesMessage = new FacesMessage();
          facesMessage.setSeverity(FacesMessage.SEVERITY_ERROR);     
          facesMessage.setDetail(this.ppsResources.getString("passwordupdated"));
          facesMessage.setSummary(this.ppsResources.getString("passwordupdated"));
          faceContext.addMessage("main:changepassview:changePassForm:updatedpasswordField", facesMessage);


<h:outputText id="updatedpasswordField"/>
              <h:message for="updatedpasswordField" errorClass="wf_error"></h:message>

------解决思路----------------------
和文件大小是否有关系

引用:
好像没起作用啊,我不明白的是sheet多的时候就执行两次,页面还没有反应,但是这个getListDirExpBudget()List中成功存入数据。如果导入的excel中sheet也较少,就可以成功执行。很费解啊

------解决思路----------------------
奇怪。
那么会不会是,对于很多 sheet,它就分两次上传了?
你去确认下。
怎么确认?给你点建议:监听服务器端口,几次请求一目了然。
  相关解决方案