2014-03-07 55 views
6

我們使用的是帶有JSF 2.2(Mojarra 2.2.0)和PrettyFaces 2.0的Glassfish 4.0。 當使用h:inputFile上傳文件並將其與enctype="multipart/form-data"對應的表單上傳時,表單動作僅在頁面調用directy時觸發,但如果調用漂亮的url,則不會發生任何操作。許多其他問題有一些類似的問題(例如How to use PrimeFaces p:fileUpload? Listener method is never invoked or UploadedFile is null),但其中大多數似乎使用PrimeFaces並且對篩選器的順序有困難。因爲我們想要保留用於上傳文件的JSF方法,所以我想知道是否有一些我可能錯過的Mojarra過濾器的配置。JSF 2.2 h:inputFile沒有漂亮的臉孔

web.xml當前沒有包含任何過濾器規格。

JSF的文件只包含這種形式

<h:form enctype="multipart/form-data"> 
    <h:inputFile value="#{fileModel.testFile}"/> 
    <h:commandButton value="Upload" action="#{fileModel.upload}"/> 
</h:form> 

和支持bean看起來像這樣

@ApplicationScoped 
@Named 
public class FileModel { 

    private Part testFile; 

    public Part getTestFile() { 
     return testFile; 
    } 

    public void setTestFile(Part testFile) { 
     this.testFile = testFile; 
    } 

    public void upload() { 
     System.out.println("File Data: " + testFile); 
    } 
} 

然後,取消註釋在pretty-config.xml這些線路將產生誤差,而評論他們贏得了」噸。

<url-mapping id="fileTest"> 
    <pattern value="/file" /> 
    <view-id value="/view/fileTest.xhtml" /> 
</url-mapping> 

我認爲這個問題可能是由OCPSoft描述in this post,但似乎沒有成爲一個解決方案呢。

+0

的[常見問題](http://ocpsoft.org/prettyfaces/#section-12)似乎涵蓋您的問題。 AFAIK JSF 2.2'h:inputFile'組件使用Servlet 3.0功能來執行文件上傳。您需要檢查應用程序服務器中的服務器類型,以便在web.xml中進行配置(基本上,您的鏈接答案是幹什麼的,但是要改變您使用的PF自定義過濾器)。 –

+0

但常見問題表明第三方組件,我試圖使用的是默認實現的文件輸入。我必須配置哪個過濾器? – bmurauer

+1

正如常見問題解答所說:「有必要在PrettyFaces和JSF之間啓用任何額外的過濾器來收聽Servlet Forwards'。你需要做一些調試工作。當你上傳一個文件時,只需檢查一下什麼樣的過濾器(它必須由Servlet 3.0規範覆蓋)。無論如何,從您提供代碼的最小版本以便我們重播錯誤將會很好。檢查[SSCCE格式](http://www.sscce.org/)。還要指定你的JSF 2.2 impl版本(我想它是Mojarra 2.2.0)。 –

回答

0

我的建議是:通過漂亮的臉書可收藏的頁面不應包含任何提交表單!那種頁面應該只對視圖,將文件上傳表單,而不prettyfaces另一個常規JSF頁面過濾

-1

以防萬一你想要做primefaces的實現,我已經使用了一個實現這樣

1.-配置Filter's在web.xml中

<filter> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>PrimeFaces FileUpload Filter</filter-name> 
    <servlet-name>Faces Servlet</servlet-name> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

2:頁面執行

<h:form id="form-file-upload" enctype="multipart/form-data"> 
       <p:fileUpload 
         auto="false" 
         mode="advanced" 
         value="#{yourBean.file}" 
         fileUploadListener="#{yourBean.fileListener}" 
         invalidSizeMessage="max size 10MB" 
         sizeLimit="10485760"/> 


</h:form> 

3.- Bean實現

@ManagedBean 
@ViewScoped 
public class YourBean { 

    private UploadedFile file; 

    public UploadedFile getFile() { 
     return file; 
    } 

    public void setFile(UploadedFile file) { 
     this.file = file; 
    } 

    public void fileListener(FileUploadEvent e){ 
     this.file = e.getFile(); 
    } 
} 

ShowCase Primefaces

+0

這並不回答當前的問題。如果你想共享代碼片段,使用Github左右。未來的用戶遇到''的問題,只能閱讀http://stackoverflow.com/q/8875818,因爲它已經鏈接到了問題的頂部。 – BalusC