2

Primefaces 3.2を使用してファイルダウンロード機能を開発していますが、クリック可能なオプション(h:commandlink)を使用してjsfデータテーブルに表示したいファイル名のリストをローカルから取得しています。

コードを実行すると、次の例外が発生します。

javax.el.PropertyNotFoundException:/faces/fileDownload.xhtmlの33行目と115列目value = "#{x.fileName}":プロパティ'fileName'がタイプjava.io.Fileに見つかりません

私のコードはこのJavaファイルのように見えます

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

@ManagedBean(name="fileDownloadController")
@SessionScoped
public class FileDownloadController {

    private StreamedContent file;
    private List<File>  listfiles=new ArrayList<File>();
    private String fileName;

    public FileDownloadController() {        
        File filestream=new File("C:/temp.pdf");
        InputStream stream=null;
        try {
            stream = new FileInputStream(filestream);
        file = new DefaultStreamedContent(stream, "application/pdf", "temp.pdf");
        stream.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public List<File> getListfiles() {
        File folder = new File("c:\\");
        File[] listOfFiles = folder.listFiles();
        listfiles=Arrays.asList(listOfFiles);
        int i;
        for(i=0;i<listfiles.size();i++){
       System.out.println("The List of file are"+listfiles.get(i));
       listfiles.get(i);
        }
        return listfiles;
    }

    public void setListfiles(List<File> listfiles) {
        this.listfiles = listfiles;
    }

    public String getFileName() {
        getListfiles();
        return fileName;
    }

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

    public StreamedContent getFile() {
        return this. file;
    }
}

私のXHTMLは次のようになります。

<h:form id="form">  
 <h:dataTable value="#{fileDownloadController.listfiles}" var="x" 
              bgcolor="#F1F1F1" border="10" cellpadding="5" 
              cellspacing="3" first="0" rows="4" width="50%" 
              summary="This is a JSF code to create dataTable.">
              <h:column>
                <f:facet name="header">
                <h:outputText value="File Names"></h:outputText>
                </f:facet>
                <h:commandLink value="#{x.fileName}" onclick="PrimeFaces.monitorDownload(showStatus, hideStatus)">
                        <p:fileDownload value="#{fileDownloadController.file}" />
                </h:commandLink>
             </h:column>
               </h:dataTable> 
</h:form>  

どこが間違っていたのかわかりません。助けてください。

4

1 に答える 1

1

どうやって使うようになったの#{x.fileName}ですか?クラスのjavadocをjava.io.File注意深く見てください。そうです、のような方法はありませんgetFileName()。それはまさに例外があなたに伝えようとしていることです。

value = "#{x.fileName}":プロパティ'fileName'がタイプjava.io.Fileに見つかりません

ほとんどの場合、getName()代わりにメソッドを使用するつもりでした。

#{x.name}

具体var="file"的な問題とは関係なく、無意味なものの代わりに使用した場合、コードはより自己文書化されますvar="x"

于 2012-09-11T01:24:18.437 に答える