首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JSF @PostConstruct在ConfigurableNavigationHandler执行后再次触发

JSF @PostConstruct在ConfigurableNavigationHandler执行后再次触发
EN

Stack Overflow用户
提问于 2012-10-17 19:08:29
回答 1查看 671关注 0票数 0

我有一个奇怪的问题,我使用的是JSF 2.1.6和Primefaces 3.4。

问题是,我的@ViewScoped bean中的@PostConstruct在onSelectNavigate之后再次触发,这导致了NPE,因为在Flash作用域中不再设置东西。

我有以下init()方法

@PostConstruct public void init() {

代码语言:javascript
运行
复制
    log.debug("initing DashBoard");

    epsDashboardVos = new ArrayList<>();

    for (Eps eps : epsService.getEpss()) {
        /// do some stufff

    }

}

在同一个bean中,下面的导航方法

代码语言:javascript
运行
复制
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");
}

然后,我在日志中看到的是,导航方法被调用,但随后同一bean中的init()方法再次被调用。

代码语言:javascript
运行
复制
  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
EN

回答 1

Stack Overflow用户

发布于 2012-10-17 19:16:59

您正在导航到不同的视图。这就是当前视图范围的末尾。如果由于某种原因,相同的支持bean类也被引用为另一个视图中的视图作用域bean,那么将为新的视图作用域创建一个新实例。

具体的功能需求并不明确,因此不可能为您尝试实现的任何目标提出正确的方法。也许“修复”这个问题的最简单方法是在@PostConstruct中添加一个空检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12932977

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档