私は多くのページを読みましたが、確かに、どこかでいくつかのエラーを起こし、ファイルのアップロードを単純に行うことができません。
まず、私は Netbeans 7 と JDK 1.7 を搭載した Glassfish 3.1 で JSF2.0、Primefaces 3.2、および JPA2 を使用して開発しています。
次に言わなければならないことは、他の多くのクラスから拡張され、ファイルシステムの多くのフォルダーにファイルを格納するインターフェイスにこのコードを挿入しようとしていることです! それでは、私が書いたことを報告し、どこに問題があるのか教えてください!
これは、web.xml へのコードです。
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>uploadDirectory</param-name>
<param-value>D:/Cyborg/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
p:uploadFile を含むページには、他の多くのフォームのフィールドも含まれています。興味があると思われるものだけをコピーします。
...
<h:form method="POST">
...
<h:outputLabel for="uploadFile" value="#{bundle.LabelUploadFile}" />
<p:fileUpload value="#{progettiController.uploadFile}" mode="simple" />
...
<h:commandLink action="#{progettiController.create}" value="#{bundle.SaveLink}" />
...
これは、AbstractController と呼ばれるインターフェイスへのコードです。
protected UploadedFile uploadFile;
public void setUploadFile(UploadedFile uploadFile) {
this.uploadFile=uploadFile;
}
public UploadedFile getUploadFile() {
return uploadFile;
}
そして最後にメソッド Create into ProgettiController:
public String create() {
try {
getFacade().create(current);
System.out.println("Message: ProgettiController: Create: new row created successfully!");
try {
current=getFacade().findLast();
String ext=uploadFile.getFileName();
System.out.println("Message: ProgettiController: Create: FileName="+ext);
ext=ext.substring(ext.lastIndexOf("."),ext.length());
System.out.println("Messaggio: ProgettiController: ext="+ext);
current.setNomeFile(ext.substring(0,ext.lastIndexOf(".")));
current.setTipoFile(ext.substring(ext.lastIndexOf(".")+1,ext.length()));
getFacade().edit(current);
ext=urlFilesystem+current.getId()+ext.substring(ext.lastIndexOf(".")+1,ext.length());
System.out.println("Message: ProgettiController: Create: posizione e nome del file="+ext);
File oldFile= (File)uploadFile;
File newFile= new File(ext);
oldFile.renameTo(newFile);
} catch (Exception e) {
System.out.println("Messaggio: ProgettiController: Create: errore nel try legato al upload="+e.getMessage());
e.printStackTrace();
}
JsfUtil.addSuccessMessage(ResourceBundle.getBundle("/Bundle").getString("ProgettiCreated"));
recreateModel();
System.out.println("Messaggio: ProgettiController: create try");
return url+"List?faces-redirect=true";
} catch (Exception e) {
JsfUtil.addErrorMessage(e, ResourceBundle.getBundle("/Bundle").getString("PersistenceErrorOccured"));
System.out.println("Messaggio: ProgettiController: create catch="+e.getMessage());
e.printStackTrace();
return url+"List?faces-redirect=true";
}
}
このコードを試してみると、ページ呼び出しでメソッドが null を uploadFile に返すときに、"enctype="multipart/form-data"" を h:form タグに追加すると、アプリケーションがメソッドを呼び出さなかったという問題が発生します。誰かが私を助けることができますか?どうもありがとう!