JSF 2.2 h:Inputfile无法与漂亮的面孔一起使用



我们使用的是JSF 2.2(Mojarra 2.2.0)的Glassfish 4.0和PrettyFaces 2.0。尝试使用h:inputFile与相应的表单enctype="multipart/form-data"上传文件时,仅当页面称为Directy时,才会触发表单操作,但是如果称为"漂亮URL",则不会发生任何情况。许多其他问题也有一些类似的问题(例如,如何使用PrimeFaces p:fileupload?从未调用侦听器方法或上载文件是无效的),但是其中大多数似乎使用PrimeFaces,并且在过滤器的顺序上遇到困难。因为我们想要为了保留用于上传文件的JSF方法,我想知道是否有一些我可能错过的Mojarra过滤器的配置。

web.xml当前不包含任何过滤器规格。

JSF文件仅包含此表单

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

和背豆看起来像

@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在这篇文章中描述的,但似乎还没有解决方案。

我的建议是:可以通过漂亮的面孔书签的页面,不应包含任何提交表格!这种页面应仅供查看

以防万一您想使用PrimeFaces进行实现,我已经使用了这样的实现

1.-在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();
    }
}

展示PrimeFaces

最新更新