2013-04-26 117 views
1

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

调试它,我看到我的搜索页面在调用命令链接的动作方法mbean.edit之前调用它。我的豆MBeanSearch是请求范围,我的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是我的编辑方法后调用以后再次调用。

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

+0

我们需要附加信息来追踪问题。事实上,Michi的解释是最可能的解释。 – skuntsel 2013-04-27 08:50:12

回答

0

问题似乎是在search.xhtmlvar.xhtml中使用的视图范围管理bean mbean(我认为它有点不清楚)。

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

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