Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 2 如何在JSF中上传文件_Jsf 2_Nullpointerexception_Tomahawk - Fatal编程技术网

Jsf 2 如何在JSF中上传文件

Jsf 2 如何在JSF中上传文件,jsf-2,nullpointerexception,tomahawk,Jsf 2,Nullpointerexception,Tomahawk,实际上,我正在使用JSF创建一个用于上传文件的应用程序。但每当我上传一个文件并单击send时,它就会显示NullPointerException。我在应用程序中使用的代码是: 使用Tomahawk的JSF代码: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="f" uri="http://java

实际上,我正在使用JSF创建一个用于上传文件的应用程序。但每当我上传一个文件并单击send时,它就会显示NullPointerException。我在应用程序中使用的代码是:

使用Tomahawk的JSF代码:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html"%>
<%@ taglib prefix="t" uri="http://myfaces.apache.org/tomahawk"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Email Client Web Application</title>
</head>
<body>
<f:view>
<h:form>
    <h:panelGrid columns="3" id="basePanel" rules="rows" border="0">
        <h:outputLabel>TO:</h:outputLabel>
        <h:inputText id="txtTo" size="50" required="true"
            requiredMessage="Recipient cannot be empty"
            value="#{MailSenderBean.to}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtTo" style="color:red"></h:message>
        <h:outputLabel>CC:</h:outputLabel>
        <h:inputText id="txtCC" size="50" value="#{MailSenderBean.cc}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtCC" style="color:red"></h:message>
        <h:outputLabel>BCC:</h:outputLabel>
        <h:inputText id="txtBCC" size="50" value="#{MailSenderBean.bcc}">
            <f:validator
                validatorId="userLibrary.validators.DefaultRecipientValidator" />
        </h:inputText>
        <h:message for="txtBCC" style="color:red"></h:message>
        <h:outputLabel>SUBJECT:</h:outputLabel>
        <h:inputText id="txtSubject" size="92"
            value="#{MailSenderBean.subject}"></h:inputText>
        <h:message for="txtSubject"></h:message>
        <h:outputLabel></h:outputLabel>
        <h:inputTextarea id="txtMessage" rows="10" cols="70"
            value="#{MailSenderBean.messageBody}"></h:inputTextarea>
        <h:message for="txtMessage"></h:message>
    </h:panelGrid>
    <div id="part2" style="position:fixed;left:85px">
    <t:inputFileUpload id="file" value="#{MailSenderBean.uploadedFile}"></t:inputFileUpload>
    <h:message for="file" style="color: red;" />
    <br><br>
    <h:commandButton id="btnSubmit" value="Send" action="#{MailSenderBean.send}"></h:commandButton>
    </div>
</h:form>
堆栈跟踪:

    javax.faces.el.EvaluationException: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:937)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:271)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1249)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:675)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Caused by: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:79)
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
... 26 more

Caused by: java.lang.NullPointerException
at userLibrary.MailSender.send(MailSender.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70)
... 27 more
不要忘记在web.xml中配置ExtensionFilter,这样上传的文件和所有其他属性以及动作都可以由JSF处理。当前堆栈跟踪中缺少此筛选器

请注意,在action方法中,您隐式地希望uploadedFile不为null。您可能希望将required=true添加到组件中,否则当有人没有选择文件时,您将再次获得NullPointerException

另见: 完整的迷你教程 不要忘记在web.xml中配置ExtensionFilter,这样上传的文件和所有其他属性以及动作都可以由JSF处理。当前堆栈跟踪中缺少此筛选器

请注意,在action方法中,您隐式地希望uploadedFile不为null。您可能希望将required=true添加到组件中,否则当有人没有选择文件时,您将再次获得NullPointerException

另见: 完整的迷你教程

在我看来,您在EL表达式中提供了错误的bean名称。bean名称的第一个字符应为小写。例如,如果您将托管bean声明为公共类MrBean,则应将其称为MrBean。

我认为您在EL表达式中提供了错误的bean名称。bean名称的第一个字符应为小写。例如,如果您将托管bean声明为公共类MrBean,则应将其称为MrBean。

如何显示您获得的堆栈跟踪?我已编辑我的问题u请检查堆栈跟踪如何显示您获得的堆栈跟踪?我已编辑我的问题u请检查堆栈跟踪这将导致不同的异常。通过在@ManagedBeanname甚至在faces-config.xml中显式指定bean,可以给bean一个不同的托管bean名称。但您是对的,托管bean名称以大写字母开头是不好的命名约定。不,它不起作用。仍然显示空指针异常。实际上,它没有在setUploadeFile函数中设置任何数据。您是否使用servlet2.5或servlet 3.0?这会导致不同的异常。通过在@ManagedBeanname甚至在faces-config.xml中显式指定bean,可以给bean一个不同的托管bean名称。但是你是对的,以大写字母开头的托管bean名称是不好的命名约定。不,它不起作用。仍然显示空指针异常。实际上,它没有在setUploadeFile函数中设置任何数据。你是否使用servlet2.5或Servlet3.0?我对代码进行了更改,但当我使用send按钮时,它不会调用send函数然后你仍然没有配置ExtensionFilter,它在堆栈跟踪中丢失了,这就是为什么我在回答中也提到了它。请检查“请参阅”链接。它们并不仅仅是为了装饰而发布的。是的,你是对的。但是现在,当我点击发送按钮时,这个上传的文件并没有发送到我的邮件,我使用的代码在我的发送函数java文件中,如我的问题所示。我的代码中有任何错误。显示的错误是ClassCastException这是另一个问题。问一个新问题。您无法上载文件的问题现已解决。您的新问题是无法通过电子邮件发送InputStream格式的文件,这与JSF/Tomahawk无关。实际上,我正在将上载的文件转换为java.io.file..因此,它显示类转换异常错误..我在代码中进行了更改,但当我使用then onclick of send按钮时,它不会调用send函数,那么您仍然可以尚未配置ExtensionsFilter,它在堆栈跟踪中缺失,这就是为什么我在回答中也提到了它。请检查“请参阅”链接。它们并不仅仅是为了装饰而发布的。是的,你是对的。但是现在,当我点击发送按钮时,这个上传的文件并没有发送到我的邮件,我使用的代码在我的发送函数java文件中,如我的问题所示。我的代码中有任何错误。显示的错误是ClassCastException这是另一个问题。问一个新问题。您无法上载文件的问题现已解决。您的新问题是无法通过电子邮件发送InputStream格式的文件,这与JSF/Tomahawk无关。实际上,我正在将上载的文件转换为java.io.file..因为它显示类转换异常错误。。
    javax.faces.el.EvaluationException: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:96)
at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:100)
at javax.faces.component.UICommand.broadcast(UICommand.java:120)
at javax.faces.component.UIViewRoot._broadcastAll(UIViewRoot.java:937)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:271)
at javax.faces.component.UIViewRoot._process(UIViewRoot.java:1249)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:675)
at org.apache.myfaces.lifecycle.InvokeApplicationExecutor.execute(InvokeApplicationExecutor.java:34)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:171)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:189)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:928)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:539)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:298)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

Caused by: org.apache.jasper.el.JspELException: /index.jsp(50,2) '#{MailSenderBean.send}' java.lang.NullPointerException
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:79)
at javax.faces.component._MethodExpressionToMethodBinding.invoke(_MethodExpressionToMethodBinding.java:88)
... 26 more

Caused by: java.lang.NullPointerException
at userLibrary.MailSender.send(MailSender.java:81)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70)
... 27 more
<h:form>
<h:form enctype="multipart/form-data">