JSF 2 @PostConstruct方法调用了两次

时间:2013-04-26 22:13:28

标签: jsf-2 postconstruct

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

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

我的观点search.xhtml:

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

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

我的MBean bean的相关摘录:

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

    @PostConstruct
    public void initialize() { }

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

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

1 个答案:

答案 0 :(得分:0)

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

当您调用操作方法时,您仍然可以查看search.xhtml。您将获得绑定的bean实例,以查看此视图​​的范围以及对@PostConstruct方法的第一次调用。

action方法返回第二页var.xhtml的视图ID,JSF导航到此页面。如果您在此页面中也使用mbean,则会在视图更改时获得Bean的新实例。这解释了对@PostConstruct方法的第二次调用。