我有JSF2.0中新的ViewScope的問題。JSF2.0查看範圍和重定向
我有註釋爲與@PostConstruct方法
@ManagedBean(name = "userListController")
@ViewScoped
public class UserListController {
private String text = "myText";
@PostConstruct
public void init() {
System.out.println("init") ;
}
}
在主畫面的視圖範圍豆一類(/pages/main.xhtml)有一個按鈕以導航到第二頁面(/ pages/user/list.xhtml)在那裏輸出UserListController bean的屬性「text」。
按鈕是:
<h:commandButton value="Manage Users" action="gotoUsers"/>
導航情況faces-config.xml中是:
<navigation-rule>
<from-view-id>/pages/main.xhtml</from-view-id>
<navigation-case>
<from-outcome>gotoUsers</from-outcome>
<to-view-id>/pages/user/list.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
當我點擊使用Firefox /鉻按鈕我看到@PostConstruct方法@ViewScoped bean被調用兩次,而如果我使用IE8,該方法只被調用一次。
用一個簡單的相位跟蹤我看到(在FF/Chrome範例):
DEBUG - PhaseTracker - BEFORE - RESTORE_VIEW 1
DEBUG - PhaseTracker - AFTER - RESTORE_VIEW 1
DEBUG - PhaseTracker - BEFORE - APPLY_REQUEST_VALUES 2
DEBUG - PhaseTracker - AFTER - APPLY_REQUEST_VALUES 2
DEBUG - PhaseTracker - BEFORE - PROCESS_VALIDATIONS 3
DEBUG - PhaseTracker - AFTER - PROCESS_VALIDATIONS 3
DEBUG - PhaseTracker - BEFORE - UPDATE_MODEL_VALUES 4
DEBUG - PhaseTracker - AFTER - UPDATE_MODEL_VALUES 4
DEBUG - PhaseTracker - BEFORE - INVOKE_APPLICATION 5
DEBUG - PhaseTracker - AFTER - INVOKE_APPLICATION 5
DEBUG - PhaseTracker - BEFORE - RESTORE_VIEW 1
DEBUG - PhaseTracker - AFTER - RESTORE_VIEW 1
DEBUG - PhaseTracker - BEFORE - RENDER_RESPONSE 6
Init.
DEBUG - PhaseTracker - AFTER - RENDER_RESPONSE 6
DEBUG - PhaseTracker - BEFORE - RESTORE_VIEW 1
DEBUG - PhaseTracker - AFTER - RESTORE_VIEW 1
DEBUG - PhaseTracker - BEFORE - RENDER_RESPONSE 6
Init.
DEBUG - PhaseTracker - AFTER - RENDER_RESPONSE 6
難道我做錯了什麼?
我從這個論壇看到,包含組件綁定時存在ViewScope的一個bug,但我的bean實際上只是一個字符串(當然問題來自一個非常複雜的例子,我試圖加載一些數據從@PostConstruct方法中的數據庫,但我試圖將示例減少到最低限度)