Jsf 需要文件上载=";“真的”;不';我不在工作

Jsf 需要文件上载=";“真的”;不';我不在工作,jsf,file-upload,jsf-2,primefaces,Jsf,File Upload,Jsf 2,Primefaces,我正在尝试在我的中进行验证。当用户上传而没有放入任何文件时,会收到一条错误消息。我正在使用mode=“simple”和required=“true”但是required=“true”不起作用 注:我需要使用mode=“simple”,因为我需要提交其他数据 <p:panelGrid columns="2"> <h:outputLabel id="image" value="Select Image: *" /> <p:fileUpload valu

我正在尝试在我的
中进行验证。当用户上传而没有放入任何文件时,会收到一条错误消息。我正在使用
mode=“simple”
required=“true”
但是
required=“true”
不起作用

注:我需要使用
mode=“simple”
,因为我需要
提交其他数据

<p:panelGrid columns="2">
    <h:outputLabel id="image" value="Select Image: *" />

    <p:fileUpload value="#{Jcalendar.file}" mode="simple"
                  allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
                  required="true"
                  requiredMessage="File not selected !!"/>

    <f:facet name="footer">
        <p:commandButton value="Submit"
                         ajax="false"
                         action="#{Jcalendar.Upload}"
                         update=":form:msgs" />
    </f:facet>
</p:panelGrid>

根据5.2源代码,当使用Servlet 3.0本机上载而不是Apache Commons FileUpload时,这确实会失败

仅当输入完全未提交时,才会将提交的值设置为空字符串。因此,如果实际提交了输入,但输入值为空,则此操作将失败

51        if(part != null) {
52            fileUpload.setTransient(true);
53            fileUpload.setSubmittedValue(new NativeUploadedFile(part));
54        }
55        else {
56            fileUpload.setSubmittedValue("");
57        }
当提交的文件名为空时,会将提交的值设置为空字符串,与预期的完全相同

54        if(file != null) {
55            if(file.getName().equals("")) {
56                fileUpload.setSubmittedValue("");
57            } else {
58                fileUpload.setTransient(true);
59                fileUpload.setSubmittedValue(new DefaultUploadedFile(file));
60            }
61        }  

让它工作的最佳方法是向PrimeFaces的家伙报告问题,同时定制/修补渲染器,或者切换回Commons uploader。

没有任何验证器(包括您自己的自定义验证器)可以使用
@Tiny您能告诉我如何使用吗?我不熟悉PrimeFace除了将验证逻辑放入
的监听器(或其他可能的地方)之外,任何事情都无法完成(除非进行了一些繁琐的黑客/自制的重新编写器)。忘记了你使用的是<代码>模式=“简单”< /代码>。您可能有机会实现自定义验证器(我从未使用过
mode=“simple”
)。@Tiny他们都使用mode=“advanced”,但我不能使用它,因为我不想使用(FileUploadEvent事件)