我有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方法中的数据库,但我试图将示例减少到最低限度)