我正在尝试使用primefaces fileuploader上传文件,但它返回null,
addPhotos.xhtml:
<h:form id="importDevicesForm" enctype="multipart/form-data">
<h:outputText value="Photo :" />
<p:fileUpload id="scriptUpload"
widgetVar="importDevicesWidget"
fileUploadListener="#{docBean.file}"
auto="true"
label="Choisir une photo.."
mode="advanced"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/">
<h:outputText value="Description :" />
<p:commandButton value="Ajouter" action="#{docBean.ajouter_photo}"/>
</h:form>
我的支持bean:我想上传文件,使用outputStream在文件系统中写入文件。
@ManagedBean(name = "docBean")
@SessionScoped
public class DocumentBean implements Serializable {
private static final long serialVersionUID = 1L;
private UploadedFile file = null;
private File doc;
private InfoDAO docdao = new InfoDaoImpl();
public UploadedFile getFile() {
return file;
}
public void setFile(FileUploadEvent event) {
this.file = event.getFile();
}
public String ajouter_photo() throws SQLException, IOException
{
System.out.println("call");
File targetFolder = new File("C:/images/upload");
InputStream inputStream = this.file.getInputstream();
OutputStream out = new FileOutputStream(new File(targetFolder,
this.file.getFileName()));
int read = 0;
byte[] bytes = new byte[1024];
while ((read = inputStream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
inputStream.close();
out.flush();
out.close();
Document f = new Document();
f.setDescription(targetFolder.getPath());
docdao.Ajouter_info(f);
}
这是例外
Avertissement: #{docBean.ajouter_photo}: java.lang.NullPointerException
javax.faces.FacesException: #{docBean.ajouter_photo}: java.lang.NullPointerException
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:117)
答案 0 :(得分:1)
此处,供您参考。
upload.xhtml
<h:form enctype="multipart/form-data">
<p:fileUpload value="#{PrimefacesFileUpload.uploadedFile}" mode="simple" sizeLimit="50000"
allowTypes="/(\\\\\\\\./\\\\\\\\/)(gif|jpe?g|png|txt)$/"/>
<p:growl id="messages" showDetail="true"/>
<p:commandButton value="Submit" actionListener="#{PrimefacesFileUpload.upload}" ajax="false"/>
</h:form>
PrimefacesFileUpload.java
@ManagedBean(name = "PrimefacesFileUpload")
public class PrimefacesFileUpload {
private UploadedFile uploadedFile;
public void setUploadedFile(UploadedFile uploadedFile) {
this.uploadedFile = uploadedFile;
}
public UploadedFile getUploadedFile() {
return uploadedFile;
}
public void upload(ActionEvent event) {
String fileName = uploadedFile.getFileName();
byte[] content = uploadedFile.getContents();
String contentType = uploadedFile.getContentType();
// Keep upload file
FacesContext.getCurrentInstance().addMessage("messages", new FacesMessage("Successful! " + uploadedFile.getFileName() + " is uploaded."));
}
}
web.xml - 确保配置
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>51200</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
答案 1 :(得分:0)
请尝试以下代码:
XHTML:
<h:form enctype="multipart/form-data">
<p:fileUpload
id="scriptUpload"
widgetVar="importDevicesWidget"
fileUploadListener="#{imageUpload_2.handleFileUpload}"
value="#{imageUpload_2.uploaded_image}"
auto="true"
label="Choisir une photo.."
mode="advanced"
allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
/>
<p:commandButton id="btn_save"
value="Save To Database"
actionListener="#{imageUpload_2.btn_save_clicked}"/>
</h:form>
JSF:
@ManagedBean
@ViewScoped
public class ImageUpload_2 implements Serializable {
UploadedFile uploaded_image;
public UploadedFile getUploaded_image() {
return uploaded_image;
}
public void setUploaded_image(UploadedFile uploaded_image) {
this.uploaded_image = uploaded_image;
}
String upload_location;
public String getUpload_location() {
return upload_location;
}
public void setUpload_location(String upload_location) {
this.upload_location = upload_location;
}
public void handleFileUpload(FileUploadEvent event) {
uploaded_image = event.getFile();
ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
String v_file_ext = uploaded_image.getFileName().split("\\.")[(uploaded_image.getFileName().split("\\.").length) - 1];
upload_location = servletContext.getRealPath("") + File.separator + "temp-images" + File.separator + "3" + "." + v_file_ext;
FileImageOutputStream imageOutput;
try {
imageOutput = new FileImageOutputStream(new File(upload_location));
imageOutput.write(uploaded_image.getContents(), 0, uploaded_image.getContents().length);
imageOutput.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void btn_save_clicked(ActionEvent event) {
byte[] file = new byte[uploaded_image.getContents().length];
System.arraycopy(uploaded_image.getContents(), 0, file, 0, uploaded_image.getContents().length);
//ent.setImg(file);
//yourfacade.create(ent);
}
public ImageUpload_2() {
}
}
其中ent是Entity Class的对象,img(setImg)是BLOB类型的数据库列。您只需要在xhtml文件所在的web文件夹下的项目中创建“temp-images”文件夹。如果您还有任何问题,请告诉我。