实际上我正在使用JSF创建一个上传文件的应用程序。 但每当我上传文件并单击发送时,它都会显示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>

java文件的代码:

public String send() {

    System.out.println("File type: " + uploadedFile.getContentType());
    System.out.println("File name: " + uploadedFile.getName());
    System.out.println("File size: " + uploadedFile.getSize() + " bytes");

    String status = "fail";
    Properties props = new Properties();
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory");
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.port", "465");

    Session session = Session.getDefaultInstance(props,
            new javax.mail.Authenticator() {
                protected PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication("saikia.buddha",
                            "b10Q@`z&0%");
                }
            });

    try {

        Message message = new MimeMessage(session);
        MimeBodyPart part1=new MimeBodyPart();
        MimeBodyPart part2=new MimeBodyPart();

        FileDataSource datasource=new FileDataSource((File) uploadedFile);

        message.setFrom(new InternetAddress("saikia.buddha@gmail.com",
                "BUDDHA SAIKIA"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(getTo()));
        message.setRecipients(Message.RecipientType.CC,
                InternetAddress.parse(getCc()));
        message.setRecipients(Message.RecipientType.BCC,
                InternetAddress.parse(getBcc()));
        message.setSubject(getSubject());

        part1.setText(messageBody);

        part2.setDataHandler(new DataHandler(datasource));
        try {
            part2.attachFile(datasource.getFile());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Multipart multipart=new MimeMultipart();
        multipart.addBodyPart(part1);
        multipart.addBodyPart(part2);
        message.setContent(multipart);

        Transport.send(message);
        status = "success";
    } catch (MessagingException e) {
        throw new RuntimeException(e);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return status;
}

堆栈跟踪:

    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

===============>>#1 票数:3 已采纳

<h:form>

根据Tomahawk文档,您忘记将表单的enctype设置为multipart/form-data

相应修复:

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

不要忘记在web.xml配置ExtensionsFilter ,以便JSF可以处理上载的文件和所有其他属性以及操作。 您的当前堆栈跟踪中缺少此过滤器。

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

也可以看看:

===============>>#2 票数:0

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

  ask by AndroidDev translate from so

未解决问题?本站智能推荐:

1回复

了解JSF转换器接口

业务需求 我们必须让用户输入其雇主的雇主名称和雇主标题(放入div中可以说class =“ empInfo”)。 现在用户甚至可能有多个雇主,因此我们提供了一个按钮,单击该按钮将创建另一个div(我基本上是克隆div)。 工作流程 有一个表单开始页面(用jsf编写的.xhtm
1回复

在JSF中加载和显示图像

我将图像保存到系统的文件夹中。 这些已成功上传。 然后我将图像名称保存到数据库中。 现在,为了显示图像,我正在获取文件的名称,然后尝试显示它,但是它不起作用。 代码如下 用于上传目的 Java类中使用的方法 一切正常,现在我从数据库中获取文件名,如下所示 我
1回复

JSF:动态更改表单

我想构建一个表单,该表单根据其他组件的状态动态更改可见的组件。 例如,...有一些文本框和一些复选框,并且如果用户激活了某个复选框,则应该出现一堆其他输入元素。 我可以使用JSF 2.0 + Tomahawk来做到这一点吗,还是必须让另一个库来做到这一点? 我该怎么办呢? 没有A
1回复

JSF 2.0和MyFaces Tomahawk

我一直在研究使用JSF 1.2和tomahawk 1.1.9&no facelets的现有Web应用程序的JSF升级,以使用JSF 2.0和tomahawk 1.1.9 这是我的发现: 所有的战斧组件都工作,除了t:dataTable与at:dataScroller一起使用 -
1回复

从JSF1.2 + Facelets迁移到JSF2,“具有重复ID的组件”问题

我正在将应用程序从JSF1.2 / MyFaces + Facelets迁移到JSF2.1 / MyFaces。 我有以下用于JSF1.2 / MyFaces + Facelets的模板。 迁移后,出现以下错误: java.lang.IllegalStateException:重
1回复

将带有图块的JSF1.1(MyFaces实现)迁移到JSF2.0

是否可以在JSF2.0中使用图块? 我正计划将带有战斧JSP切片视图处理程序的MyFaces1.1迁移到JSF2.0中。 Facelets是JSF2中的默认视图处理程序,是否可以在JSF2中将tile用作视图处理程序?
1回复

JSF战斧T:列条件渲染

所以,嗯,我有JSF战斧表 我想省略一些列。 我无法更改数据模型。 列总数不时变化。 试过了 但它仍输出空列。 这个答案不是一个选择: 条件列渲染 因为我使用t:columns而不是t:column 。 使用t:columns时如何省略某些t:colu
1回复

jsf 2:使用Tomahawk在ManagedBean中的UploadedFile为null

我按照BalusC的分步教程进行操作: JSF 2.0文件上传 但是当我单击commandButton时,我发现UploadedFile为null。 web.xml中: 网页: 我也阅读了这篇文章: 用Tomahawk提交jsf上传请求时,UploadedFile为n
2回复

根据JSF 2中的条件为数据表行着色

我想根据条件更改行的背景颜色。 <t:dataTable id="data" styleClass="history-table" headerClass="history-table-header"
1回复

JSF数据表,战斧无线电

我正在尝试使用at:radio in rich:datatable但它总是抱怨它无法找到组件。 我做了一些谷歌搜索,我必须声明全名,但我实际上认为我这样做。 任何人都可以指出我做错了什么? 代码(我不打算给出一个缩小版本,因为我猜它的组合出错了): letterDetailTem