У меня есть компонент fileDownload внутри dataTable, но когда я щелкаю по нему, кажется, что filedownloader вызывается до того, как переменная datlis.filepath установлена setPropertyActionListener.
Когда я нажимаю «загрузить», я получаю «Не удается создать экземпляр класса: ui.FileDownloader.com.sun.faces.mgbean.ManagedBeanCreationException: Не удается создать экземпляр класса: ui.FileDownloader."
Мой код jsf:
<p:column headerText="Metadata" style="width:40px">
<p:commandButton id="selectButton" rendered="#{datlis.has_metadata}" icon="ui-icon-circle-arrow-s" title="View" ajax="false" >
<f:setPropertyActionListener value="#{datlis.filepath}" target="#{filedownloader.filepath}" />
<p:fileDownload value="#{filedownloader.file}" />
</p:commandButton>
</p:column>
Компонент, который представляет «datlis», - это ViewScoped в моем приложении - и я проверил, что datlist.filepath не равен NULL.И бин загрузки файла (FileDownloader) выглядит следующим образом:
@ManagedBean(name="filedownloader")
@RequestScoped
public class FileDownloader {
private StreamedContent file;
public StreamedContent getFile() {
return file;
}
@ManagedProperty(value="#{param.filepath}")
private String filepath;
public String getFilepath() {
return filepath;
}
public void setFilepath(String filepath) {
System.out.println("> "+filepath);
this.filepath = filepath;
System.out.println(">> "+this.filepath);
}
public FileDownloader() throws FileNotFoundException {
System.out.println("100");
String filename = "/opt/glassfish3/glassfish/domains/domain1/datasets/string_compare/Business v2 Metadata/README.txt";
InputStream stream = new FileInputStream(filepath);
file = new DefaultStreamedContent(stream, "text/txt", "README.txt");
}
Трассировка стека упоминает исключение нулевого указателя относительно inputsream, и поэтому я думаю, что переменная 'filepath' не установлена - плюсмой системный вывод показывает только «100» из System.out.println, и никаких системных выходов из функции setFilepath ... как будто он вообще не вызывается.
Я также пробовал:
<p:column headerText="Metadata" style="width:40px">
<p:commandButton id="selectButton" rendered="#{datlis.has_metadata}" icon="ui-icon-circle-arrow-s" title="View" ajax="false" >
<f:param name="filepath" value="#{datlis.filepath}" />
<p:fileDownload value="#{filedownloader.file}" />
</p:commandButton>
</p:column>
с добавленным кодом прямо над средством получения / установки пути к файлу в моем классе FileDownloader:
@ManagedProperty(value="#{param.filepath}")
private String filepath;
Но это также нене похоже на работу.Есть идеи?Я чувствую, что на правильном пути, возможно, просто неправильно использую элементы ...