2014-02-20 23 views
0

我正在使用Primefaces 4.0在Apache Tomcat 7上運行Web應用程序。 試圖實現類似於Primefaces ShowCase的上傳界面,上傳界面不會觸發後臺bean中的任何函數:使用Primefaces 4.0上傳接口不會觸發

這裏是我直接包含在我的身體(我也試過沒有「多個」,「價值」高級模式‘的ActionListener’屬性)

      <p:fileUpload id="fileupload_" 
          value="#{userWizard.fu.uploadedFile}" 
          fileUploadListener="#{userWizard.fu.addFileToAttachment}" 
          actionListener="#{userWizard.fu.listener}" 
          mode="advanced" 
          dragDropSupport="false" 
          update="messages" 
          multiple="false" 
          sizeLimit="50000000" 
          fileLimit="3" 
          allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
          auto="true"/> 
     <p:growl id="messages" showDetail="true" /> 

這裏是我支持bean:

import java.util.LinkedList; 
import java.util.List; 
import org.primefaces.event.FileUploadEvent; 
import org.primefaces.model.UploadedFile; 
import javax.faces.bean.ManagedBean; 
import javax.faces.bean.SessionScoped; 
import javax.faces.event.ActionEvent; 

@ManagedBean 
@SessionScoped 
public class FileUpload { 

private UploadedFile uploadedFile; 

List<UploadedFile> files = new LinkedList<UploadedFile>(); 

public FileUpload() 
{} 

public List<UploadedFile> getFiles() { 
    System.out.println("<getFiles> "); 
    return files; 
} 

public void setFiles(List<UploadedFile> files) { 
    System.out.println("<setFiles> "); 
    this.files = files; 
} 

public void addFileToAttachment(FileUploadEvent event) 
{ 
    System.out.println("addfile"); 
    System.out.println("upload > " + event.getFile().getFileName()); 
    files.add(event.getFile()); 
} 

public UploadedFile getUploadedFile() { 
    System.out.println("<getFile> "); 
    return uploadedFile; 
} 

public void setUploadedFile(UploadedFile uploadedFile) { 
    System.out.println("<setFile> "); 
    this.uploadedFile = uploadedFile; 
} 

public void listener(ActionEvent ae) 
{ 
    System.out.println("listener"); 
} 



public void insert() 
{ 
    System.out.println("insert"); 
    if(uploadedFile !=null) 
    { 
     System.out.println(" > " + uploadedFile.getFileName()); 
    } 
} 

} 

我看到在我的網頁上傳界面和文件似乎上傳,但沒有聽衆/ setters println是pr在我的輸出中輸入。一個正常的命令按鈕和我的FileUpload bean中的監聽器通常會觸發它。

使用Primefaces 4.0,我沒有在我的web.xml文件中添加FileUpload過濾器(我也嘗試添加它以防萬一,但它沒有更好的工作)。

此外,commons-fileupload-1.3.1.jar和commons-io-2.4.jar位於我的項目庫中。

有沒有人有我的問題可能在哪裏的想法?

謝謝

+0

http://www.youtube.com/watch?v=imiBwk_xqaE – Makky

+0

其實,有幾個步驟來實現這一目標。請按照上面的視頻教程或谷歌瞭解更多。 – Makky

回答

0

多次檢查後,我意識到,我用javax.faces-2.1,而不是2.2。 與javax.servlet API結合,仍然在Primefaces 4.0中,我的問題現在似乎解決了。

+0

通過您的回答,看起來像您的JSF 2.2 + PrimeFaces 4項目中的配置錯誤... –

0

在您的代碼fileUploadListener="#{userWizard.fu.addFileToAttachment}",但您只需發佈FileUpload.java。 我沒有看到您的userWizard bean和addFileToAttachment偵聽器方法。但是,嘗試如下

配置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> 

h:form必須像<h:form enctype="multipart/form-data">

對於多個上傳例如:

multipleupload.xthml

<h:form enctype="multipart/form-data"> 
     <p:fileUpload fileUploadListener="#{MultipleUploadActionBean.handleProposalAttachment}" 
        mode="advanced" multiple="true" sizeLimit="3000000" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/" id="attachment"/> 
</h:form> 

MultipleUploadActionBean.java

@ManagedBean(name = "MultipleUploadActionBean") 
@ViewScoped 
public class MultipleUploadActionBean { 
    private List<UploadedFile> uploadFileList = new ArrayList<UploadedFile>(); 

    public void handleProposalAttachment(FileUploadEvent event) { 
     UploadedFile uploadedFile = event.getFile(); 
     uploadFileList.add(uploadedFile); 
    } 
} 

對於單上傳例如:

singleupload.xthml

<h:form enctype="multipart/form-data"> 
    <p:fileUpload value="#{SingleUploadActionBean.uploadedFile}" mode="simple"/> 
    <p:commandButton value="Submit" ajax="false" actionListener="#{SingleUploadActionBean.upload}"/> 
</h:form> 

SingleUploadActionBean.java

@ManagedBean(name = "SingleUploadActionBean") 
@ViewScoped 
public class SingleUploadActionBean { 
    private UploadedFile uploadedFile; 
    //getter & setter 

    public void upload() { 
     //your operation 
    } 
} 
+0

謝謝你的回答,我終於設法通過更新其中一個庫來解決我的問題(我有JSF 2.1,用2.2取代了它,並且一切都很順利)。我之前曾嘗試將過濾器映射添加到我的web.xml中,但似乎它不再是Primefaces 4的必需 – Phef

相關問題