2012-04-16 10 views
1

xhtmlページにarrayListの要素を表示しようとしていますが、新しいファイルをアップロードするたびに、ステータスページに最後にアップロードされたファイルの複数のエントリが表示されます。JSF:ArrayListの要素が正しくレンダリングされませんか?

<ace:dataTable id ="archiveResults" resizableColumns="true" paginatorPosition="bottom" paginator="true" page="1" value="${fileUpload.resultBeanList}" var="result"> 
     <ace:column id="fileUploadFileName" headerText="uploaded file" sortBy="#{result.fileName}" filterBy="#{result.fileName}" filterMatchMode="contains"> 
      <h:outputFormat id="cellFileUploadFileName" value="${result.fileName}" /> 
     </ace:column> 
     <ace:column id="fileUploadTime" headerText="time run" sortBy="#{result.timeRun}" filterBy="#{result.timeRun}" filterMatchMode="contains"> 
      <h:outputFormat id="cellFileUploadTime" value="${result.timeRun}" /> 
     </ace:column> 
     <ace:column id="fileUploadJobType" headerText="job type" sortBy="#{result.jobType}" filterBy="#{result.jobType}" filterMatchMode="contains"> 
      <h:outputFormat id="cellFileUploadJobType" value="${result.jobType}" /> 
     </ace:column> 
     <ace:column id="fileUploadStatus" headerText="Status" sortBy="#{result.status}" filterBy="#{result.status}" filterMatchMode="contains"> 
      <h:outputFormat id="cellFileUploadStatus" value="${result.status}" /> 
     </ace:column> 
</ace:dataTable> 

Javaコード:ここで

コード

XHTMLコードである

private List<ResultBean> resultBeanList = new ArrayList<ResultBean>(); 
    private ResultBean resultBean = new ResultBean(); 

    public ResultBean getResultBean() { 
     return resultBean; 
    } 

    public void setResultBean(ResultBean resultBean) { 
     this.resultBean = resultBean; 
    } 

    public List<ResultBean> getResultBeanList() { 
     System.out.println("resultBeanList: "+resultBeanList.toString()); 
     return resultBeanList; 
    } 

    public void setResultBeanList(List<ResultBean> resultBeanList) { 
     this.resultBeanList = resultBeanList; 
    } 

public void uploadFile(FileEntryEvent event) { 
     FileEntry fileEntry = (FileEntry) event.getSource(); 
     FileEntryResults results = fileEntry.getResults(); 
     FileEntry fe = (FileEntry) event.getComponent(); 
     FacesContext ctx = FacesContext.getCurrentInstance(); 
     FacesMessage msg = new FacesMessage(); 
     for (FileEntryResults.FileInfo fileInfo : results.getFiles()) { 
      if (fileInfo.isSaved()) { 
       File file = fileInfo.getFile(); 
       String filePath = file.getAbsolutePath(); 
       resultBean.setStatus(fileInfo.getStatus().toString()); 
       resultBean.setFileName(fileInfo.getFileName()); 
       resultBean.setJobType(selectedItem); 
       DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); 
       Date date = new Date(); 
       Calendar cal = Calendar.getInstance(); 
       dateFormat.format(cal.getTime()); 
       resultBean.setTimeRun(dateFormat.format(cal.getTime())); 
      } 
      resultBeanList.add(resultBean); 
     } 
    } 
+0

管理対象BeanにViewScopeまたはRequestScopeがありますか。 –

+0

セッションスコープです。 – Rachel

答えて

2

は、私はあなたの問題は、あなたのresultbeanを再利用しているということだと思います。アップロード方法にResultBeanの新しいインスタンスを作成する必要があります。これは問題を解決するはずです。

+0

いいえ、gettersを呼び出す方法は問題を解決しませんでしたか? – Rachel

+0

多分私はあなたがクリアすることを理解していないかもしれません、あなたはアップロードで新しいresultBeanを作成することによって何を意味しましたか? – Rachel

+0

right "public void uploadFile(FileEntryEventイベント){" add resultBean = new ResultBean() – ControlAltDel

関連する問題