我想上传很多文件,为此我选择了rich:fileUpload 控件。
我的问题是我需要为每个文件添加更多信息,例如我希望在该文件的应用程序中出现的标题。我该怎么做,并发送到 fileUploadListener 方法以使用 id?
根据您的问题,RichFaces FileUpload 演示包含同时处理 1 个或多个文件的文件上传所需的所有信息。
如果您想添加更多数据(如值和其他数据),那么您应该使用标签属性h:inputText
来传递它们,因为这是在 ajax 调用中发生的事件,因此您的 s 不会调用属性的设置器。valueChangeListener
value
fileUploadListener
UIComponent
一些解释行为的代码:
<h:panelGrid cols="2">
<h:outputText value="File Title:">
<h:inputText value="#{fileBean.fileTitle}" immediate="false"
valueChangeListener="#{fileBean.valueChangeFileTitle}" />
<h:outputText value="File:">
<rich:fileUpload
fileUploadListener="#{bean.fileUpload}">
</rich:fileUpload>
</h:panelGrid>
处理请求的 Bean
public class Bean {
private String fileTitle;
public Bean() {
}
//getters and setters...
public String getFileTitle() {
return this.fileTitle;
}
public void setFileTitle(String fileTitle) {
System.out.println("Calling the setter");
this.fileTitle = fileTitle;
}
public void valueChangeFileTitle(ValueChangeEvent e) {
System.out.println("Calling the ValueChangeListener");
fileTitle = (String)e.getNewValue();
}
//this will be invoked by an ajax call
//the setter of the view won't be invoked for fileTitle
//instead, we should take its value using valueChangeListener
public void fileUpload(UploadEvent ue) {
MyFileManager mfm = MyFileManager.getFileManager();
MyFile myFile = new MyFile();
myFile.setTitle(this.fileTitle);
myFile.setName(ue.getUploadItem().getFileName());
myFile.setData(ue.getUploadItem().getData());
mfm.createFile(myFile);
}
}
另外,避免System.out.println
在您的代码中使用调用,我这样做是为了让您了解将调用什么方法,而不是使用Log4j之类的 Logger 。