1

我有一个奇怪的行为:我注释的方法@PostConstruct被调用了两次。

调试它,我看到我的搜索页面在调用命令链接的操作方法之前调用了它mbean.edit。我的 beanMBeanSearch是请求范围的,我MBean的是视图范围的。

我的观点 search.xhtml:

<h:commandLink value="#{var.value}" action="#{mbean.edit}">
    <f:param name="id" value="#{var.id}"/>
</h:commandLink>

我还有一个目标视图 var.xhtml。

MBean我的豆子的相关提取物:

    public String edit() {
        return "/pages/var.xhtml";
    }

    @PostConstruct
    public void initialize() { }

使用此代码,@PostConstruct在我的编辑方法之后调用 my ,然后再次调用它。

我认为我@PostConstruct以错误的方式使用了(我认为MBean需要在任何方法之前启动)。但是在与搜索页面不同的页面中编辑对象的替代方法是什么?

4

1 回答 1

0

问题似乎是在andmbean中使用了视图范围的托管 bean(我认为,这有点不清楚)。search.xhtmlvar.xhtml

当您调用 action 方法时,您仍在查看search.xhtml。您将获得一个绑定到此视图的视图范围的 bean 实例以及对该@PostConstruct方法的第一次调用。

action 方法返回第二个页面的视图 ID,var.xhtmlJSF 导航到该页面。如果你mbean也在这个页面中使用,你会在视图改变时获得一个新的 bean 实例。这解释了对该方法的第二次调用@PostConstruct

于 2013-04-27T07:53:38.670 回答