javax.el.PropertyNotFoundException: свойство не найдено для типа java.io.Файл в загрузке простых лиц

Я использую Primefaces 3.2 и разрабатываю функцию загрузки файлов, и я получаю список имен файлов из моего локального каталога, который я хотел отобразить в jsf с возможностью выбора данных с помощью интерактивной опции (h:commandlink).

Когда я оправдываю свой Кодекс, я получаю следующее исключение.

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>  

Я не могу понять, куда я пошел Неправильно. Пожалуйста, помогите мне.

1 ответ

Решение

Как вы пришли к использованию #{x.fileName}? Посмотрите внимательно в Javadoc java.io.File класс Да, нет такого метода, какgetFileName(), Этоименно то, что пытается сказать вам исключение.

value = "# {x.fileName}": свойство 'fileName' не найдено для типа java.io.File

Скорее всего, вы хотели использоватьgetName() метод вместо.

#{x.name}

Не связанный с конкретной проблемой, ваш код был бы более самодокументированным, если бы вы использовали var="file" вместо бессмысленного var="x",

Другие вопросы по тегам