JSF 2.2 h:inputFile不适用于漂亮的面孔

时间:2014-03-07 09:04:25

标签: jsf file-upload jsf-2.2 prettyfaces

我们正在使用带有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过滤器的配置。

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,但似乎还没有解决方案。

2 个答案:

答案 0 :(得分:0)

我的建议是:通过漂亮的脸书面收藏的页面,不应包含任何提交表单!那种页面应该只用于查看,将你的文件上传表单移动到另一个常规的jsf页面而不用漂亮的过滤器

答案 1 :(得分:-1)

如果你想用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();
    }
}

ShowCase Primefaces