【问题标题】:RichFaces File Upload throws NullPointerExceptionRichFaces 文件上传引发 NullPointerException
【发布时间】:2010-12-29 23:20:46
【问题描述】:

我在尝试使用 RichFaces 上传文件时遇到了很多麻烦(我对目前使用的许多技术都很陌生,这肯定会使问题更加复杂)。

我可以将文件上传组件添加到页面,但每当我尝试上传图片时,它总是给我一个错误。

我得到的错误如下(至少它的开头是):

10:10:51,029 WARNING [javax.enterprise.resource.webcontainer.jsf.lifecycle] /profile.xhtml @49,25 fileUploadListener="#{editProfileAction.uploadListener}": java.lang.NullPointerException: javax.faces.el.EvaluationE
xception: /profile.xhtml @49,25 fileUploadListener="#{editProfileAction.uploadListener}": java.lang.NullPointerException
        at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:73) [:1.1.15.B1]
        at org.richfaces.component.UIFileUpload.broadcast(UIFileUpload.java:190) [:3.3.3.CR1]
        at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329) [:3.3.3.CR1]
        at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:302) [:3.3.3.CR1]
        at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261) [:3.3.3.CR1]
        at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:417) [:3.3.3.CR1]

我不确定为什么会这样。我在 Google 上进行了搜索,但没有找到有类似问题的人。

有什么可能导致这种情况的想法吗?

【问题讨论】:

  • 您的 Richfaces 代码和 java bean 代码请!仅凭您的例外很难给出解决方案。

标签: java jsf richfaces


【解决方案1】:

javax.faces.el.E​​valuationException: /profile.xhtml @49,25 fileUploadListener="#{editProfileAction.uploadListener}": java.lang.NullPointerException
在 com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:73) [:1.1.15.B1]

绑定到profile.xhtml 中的EL #{editProfileAction.uploadListener} 的方法,在第49 行,从字符25 开始,抛出了NullPointerException。您应该在堆栈跟踪中进一步查看详细信息,从“由”或“根本原因”(您在问题中省略)开始。该部分的第一行应包含在 #{editProfileAction} 托管 bean 后面的支持 bean 类的 uploadListener() 方法中抛出 NPE 的确切行号。转到代码中的此行号,您会看到类似的内容:

someObject.someMethod();

确切地说,使用点. 运算符专注于字段/方法访问/调用。这样一行上的 NPE 仅表示使用点 . 运算符的对象引用是 null。您不能在指向null 的对象引用上使用点. 运算符访问字段或调用方法。它只会抛出一个 NPE。基本上有两种方法可以解决这个问题:

  1. 当引用为null 时跳过访问/调用。所以只有在保证不是null时才这样做。

    if (someObject != null) {
        someObject.someMethod();
    }
    
  2. 通过实例化它确保它永远不是null

    if (someObject == null) {
        someObject = new SomeObject();
    }
    someObject.someMethod();
    

哪种方式是正确的解决方案取决于唯一的功能需求和代码上下文。

【讨论】:

  • 事实并非如此。侦听器 atm 中的唯一语句是带有字符串文字的 println。它甚至没有走那么远。
  • 根本原因是什么?您最好不要运行您认为正在运行的代码。
猜你喜欢
  • 2023-03-04
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2014-06-16
  • 2011-09-15
  • 1970-01-01
  • 2015-09-06
  • 2011-11-12
相关资源
最近更新 更多