奇妙な問題があります。JSF2.1.6とPrimefaces3.4を使用しています。
問題は、@ ViewScoped Beanの@PostConstructがonSelectNavigateの後に再度起動されることです。これにより、Flash Scopeに設定されなくなったため、NPEが発生します。
私は次のinit()メソッドを持っています
@PostConstruct public void init(){
log.debug("initing DashBoard");
epsDashboardVos = new ArrayList<>();
for (Eps eps : epsService.getEpss()) {
/// do some stufff
}
}
同じBeanで、次のナビゲート方法
public void onSelectedEpsNavigate(EpsDashboardVo selectedEps) {
log.debug("Selecting eps and moving to detail screen : "
+ selectedEps.getEps().getName());
FacesContext.getCurrentInstance().getExternalContext().getFlash()
.put("selectedEps", selectedEps.getEps());
// adjust header
menuController.setCurrentPage("View EPS Status - "
+ selectedEps.getEps().getName());
ConfigurableNavigationHandler configurableNavigationHandler = (ConfigurableNavigationHandler) FacesContext
.getCurrentInstance().getApplication().getNavigationHandler();
configurableNavigationHandler
.performNavigation("epsdashboard-detail-view?faces-redirect=true");
}
次にログに表示されるのは、navigateメソッドが呼び出された後、同じBean内のinit()メソッドが再度呼び出されたことです。
17 Oct 2012 11:54:07,244 DEBUG com.xxxx.eps.subscription.controller.EpsDashboardViewController : initing DashBoard
17 Oct 2012 11:54:09,550 DEBUG com.xxxx.eps.subscription.controller.EpsDashboardViewController : Selecting eps and moving to detail screen : M0951-EPS2X-DEV-Commercial
17 Oct 2012 11:54:09,553 DEBUG com.xxxx.eps.subscription.controller.EpsDashboardViewController : initing DashBoard
17 Oct 2012 11:54:09,639 DEBUG com.xxxx.eps.subscription.controller.EpsDashboardDetailViewController : initing DashBoard