Загрузка файла RichFaces создает исключение NullPointerException - PullRequest
1 голос
/ 30 декабря 2010

У меня много проблем при попытке загрузить файл с помощью 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, и мне не повезло найти кого-то с подобной проблемой.

Есть идеи, что может быть причиной этого?

1 Ответ

1 голос
/ 30 декабря 2010

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

Метод, связанный с EL #{editProfileAction.uploadListener} в profile.xhtml, в строке 49, начиная с символа 25, бросил NullPointerException.Далее вы должны увидеть подробности в трассировке стека, начиная с «Причины» или «Основной причины» (которую вы пропустили в своем вопросе).В первой строке этой части должен быть указан точный номер строки, в которую был добавлен NPE в методе uploadListener() класса базового компонента за управляемым компонентом #{editProfileAction}.Перейдите к этому номеру строки в своем коде, и вы увидите нечто похожее на:

someObject.someMethod();

Если быть точным, сконцентрируйтесь на доступе / вызове поля / метода с помощью оператора точка ..NPE в такой строке просто означает, что ссылка на объект, на котором был использован оператор ., - null.Вы не можете получить доступ к полям или вызывать методы, используя оператор точки . для ссылки на объект, который указывает на null.Было бы только бросить NPE.Существует два способа исправить это:

  1. Пропустить доступ / вызов, если ссылка null.Так что делайте это только тогда, когда гарантированно не null.

    if (someObject != null) {
        someObject.someMethod();
    }
    
  2. Убедитесь, что оно никогда не будет null, создав его экземпляр.

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

Какой путь будет правильным решением, зависит от единственного функционального требования и контекста кода.

...