0

奇妙な問題があります。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
4

1 に答える 1

0

別のビューに移動しています。これで現在のビュー スコープは終了です。何らかの理由で、同じバッキング Bean クラスが他のビューのビュー スコープ Bean としても参照されている場合、新しいビュー スコープに対して新しいインスタンスが作成されます。

具体的な機能要件が明確でないため、達成しようとしているものに対して適切なアプローチを提案することはできません。おそらく、この問題を「修正」する最も簡単な方法は、@PostConstruct.

于 2012-10-17T11:16:59.207 に答える