Публикация этой проблемы / ответа, так как я не нашел ни одного другого вопроса, который был бы очень похож. Много связанных, но не тот же сценарий.
Обновлялось приложение JSF 2.1 до JSF 2.2 (Mojarra) для поддержки h: fileUpload. Приложение работает в WebSphere 9, и после обновления возникли проблемы с внедрением зависимостей с использованием JSF Beans.
Читая далее, я понимаю, что JSF @ManagedBean
следует считать устаревшим и его следует перенести на CDI @Named
, но наше приложение имеет 627 ссылок на FacesContext, а миграция на bean-компонент CDI будет означать обновление всех этих мест для создания либо FacesContext, когда необходимо, или обновите JSF до 2.3 и введите FacesContext, где это необходимо. Это значит оставаться на JSF 2.2 на данный момент.
Вот боб:
package com.company.customersearch;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
@ManagedBean(name = "customerSearchManager")
@ViewScoped
public class customerSearchManager extends PortletManager{
private static final long serialVersionUID = -9050481751306478727L;
private Long customerId;
private SessionData sessionData;
@ManagedProperty(value = "#{customerSearchService}")
private CustomerSearchService service;
public CustomerSearchManager(){
this.sessionData = new SessionData((HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false));
if (sessionData.hasSelectedCustomer())
this.customerId = sessionData.getData().getCustomerId();
}
...
}
Работа в WebSphere 9 производила NullPointerException
Error Rendering View[/pages/customer-search.xhtml]
java.lang.NullPointerException
at com.sun.faces.application.view.ViewScopedCDIEventFireHelperImpl.fireInitializedEvent(ViewScopedCDIEventFireHelperImpl.java:60)
at com.sun.faces.application.view.ViewScopeContextManager.fireInitializedEvent(ViewScopeContextManager.java:394)
at com.sun.faces.application.view.ViewScopeManager.processPostConstructViewMap(ViewScopeManager.java:312)
at com.sun.faces.application.view.ViewScopeManager.processEvent(ViewScopeManager.java:244)
at com.sun.faces.application.view.ViewScopeEventListener.processEvent(ViewScopeEventListener.java:68)
NPE выходит из класса, связанного с CDI! Зачем нам получать NPE внутри ViewScopedCDIEventFireHelperImpl.java
, когда намеренно не используется CDI ??