Jsf 上载带有<;的文件时,UploadedFile为空;p:fileUpload模式=";简单的&燃气轮机;

Jsf 上载带有<;的文件时,UploadedFile为空;p:fileUpload模式=";简单的&燃气轮机;,jsf,file-upload,primefaces,nullpointerexception,Jsf,File Upload,Primefaces,Nullpointerexception,我需要上传一个图像到服务器。 我使用的是primefaces,下面是我的代码: deposit.xhtml <h:form> <p:fileUpload mode="simple" allowTypes="/(\.|\/)(gif|jpe?g|png)$/" value="#{imageHandler.uploadedPicture}" /> <p:commandButton action="#{imageHandl

我需要上传一个图像到服务器。 我使用的是primefaces,下面是我的代码:

deposit.xhtml

<h:form>
    <p:fileUpload mode="simple"
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"
        value="#{imageHandler.uploadedPicture}" />

    <p:commandButton action="#{imageHandler.savefile(imageHandler.uploadedPicture)}" 
        value="Déposer" ajax="false" />
</h:form>
关于跟踪,这里是我得到的错误,这是我从跟踪中选择的3行:

javax.faces.el.EvaluationException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
at ImageHandler.savefile(ImageHandler.java:43)
换句话说,它来自这里:

InputStream input = uploadedPicture.getInputstream();

我试过很多方法来消除那个错误。我使用了无参数的
savefile()
,更改了范围,等等。。。还是不能继续。这是如何导致的,我如何解决它?

当浏览器无法将文件内容与请求正文一起发送时,或者当服务器无法从请求正文中获取文件内容时,在操作方法中,它将为
null

为了让broswer发送文件内容(因此不仅仅是名称),您需要确保请求正文编码类型设置为
multipart/form data
。这可以通过如下设置表单的
enctype
属性来实现:

<h:form enctype="multipart/form-data">


与具体问题无关,以下内容毫无意义:

<p:commandButton action="#{imageHandler.savefile(imageHandler.uploadedPicture)}">

您不需要将bean属性来回传递给同一个bean。只需让action方法直接访问它

<p:commandButton action="#{imageHandler.savefile}">


此外,试图将上传的文件保存在IDE项目文件夹中也是一个坏主意。不要那样做。把它存放在别处。另请参见a.o.

上传图片是否为空?null.Method()导致NPEI认为这是因为NPE来自InputStream input=uploadedPicture.getInputstream()@BalusC当mi应用程序在Glassfish 4.xxx/Payara 4.xxx上运行时,这对我有效,现在我将我的应用程序迁移到Payara 5.183,UploadedFile变量始终为null,我使用PrimeFaces 6.1。你有主意吗?
<p:commandButton action="#{imageHandler.savefile}">