2013-04-26 90 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方法。