我們使用的是帶有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,但似乎沒有成爲一個解決方案呢。
的[常見問題](http://ocpsoft.org/prettyfaces/#section-12)似乎涵蓋您的問題。 AFAIK JSF 2.2'h:inputFile'組件使用Servlet 3.0功能來執行文件上傳。您需要檢查應用程序服務器中的服務器類型,以便在web.xml中進行配置(基本上,您的鏈接答案是幹什麼的,但是要改變您使用的PF自定義過濾器)。 –
但常見問題表明第三方組件,我試圖使用的是默認實現的文件輸入。我必須配置哪個過濾器? – bmurauer
正如常見問題解答所說:「有必要在PrettyFaces和JSF之間啓用任何額外的過濾器來收聽Servlet Forwards'。你需要做一些調試工作。當你上傳一個文件時,只需檢查一下什麼樣的過濾器(它必須由Servlet 3.0規範覆蓋)。無論如何,從您提供代碼的最小版本以便我們重播錯誤將會很好。檢查[SSCCE格式](http://www.sscce.org/)。還要指定你的JSF 2.2 impl版本(我想它是Mojarra 2.2.0)。 –