gpt4 book ai didi

java - 无法实例化类 - p :filedownload called before f:setPropertyActionListener

转载 作者:行者123 更新时间:2023-12-01 15:28:17 24 4
gpt4 key购买 nike

我在数据表中有一个 fileDownload 组件,但是当我单击它时,似乎在 setPropertyActionListener 设置 datlis.filepath 变量之前调用了 filedownloader。

当我单击下载时,我收到“无法实例化类: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”代表的 bean 在我的应用程序中是 ViewScoped - 并且我已检查 datlist.filepath 不为空。文件下载bean(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");
}

堆栈跟踪提到了有关输入流的空指针异常,这就是为什么我认为未设置“filepath”变量 - 而且我的系统输出仅显示来自 System.out.println 的“100”,并且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 类中的文件路径 getter/setter 上方添加代码:

@ManagedProperty(value="#{param.filepath}")
private String filepath;

但这似乎也不起作用。有任何想法吗?我觉得我走在正确的轨道上,也许只是滥用了元素......

最佳答案

托管属性将在构建后注入(inject)。因此,如果您尝试在 bean 的构造函数中访问它们,您将得到一个 NPE。

使用带有@PostConstruct注释的方法。构造和属性注入(inject)后会自动调用:

@PostConstruct
public void init() {
// do your initializations here
}

关于java - 无法实例化类 - p :filedownload called before f:setPropertyActionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9904707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com