2

我正在使用 Primefaces 3.2 并开发文件下载功能,我正在从本地获取文件名列表,我想在带有可点击选项的 jsf 数据表中显示它们(h:commandlink)。

当我执行我的代码时,我得到了以下异常。

javax.el.PropertyNotFoundException:/faces/fileDownload.xhtml 在第 33 行和第 115 列 value="#{x.fileName}":在 java.io.File 类型上找不到属性“fileName”

我的代码看起来像这个 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}?仔细查看的 javadocjava.io.File。对,没有像getFileName(). 这正是异常试图告诉你的。

value="#{x.fileName}":在 java.io.File 类型上找不到属性“fileName”

您很可能打算改用该getName()方法。

#{x.name}

与具体问题无关,如果您使用var="file"而不是荒谬的var="x".

于 2012-09-11T01:24:18.437 回答