ViewController does not invoke initView on new instance of same view --------------------------------------------------------------------
Key: ORCHESTRA-30 URL: https://issues.apache.org/jira/browse/ORCHESTRA-30 Project: MyFaces Orchestra Issue Type: Bug Affects Versions: 1.2 Reporter: Simon Kitching The "lifecycle" methods for backing beans are executed via the ViewControllerPhaseListener. In particular, for the initView call it checks at the beginning of every phase whether the current view has had the initView run on it for the current request-cycle, and if not then runs it. It therefore needs to remember whether initView has been executed for a view in this request. This is done by keeping a map keyed by viewId. However it is reasonable for an action method to "reset" a view by calling Conversation.getCurrent().invalidate() return ""; In this case, the new view is rendered and a new backing bean is created, but the viewId is the same so the ViewController does not call the initView lifecycle method. One possible workaround is to define a navigation-case using <redirect/>, which means the new view is rendered in a new request-cycle and therefore the ViewController is run. The code could be changed to use System.identityHashCode(viewRoot) rather than viewRoot.getViewId() as the map key; that would ensure we run the lifecycle methods when the viewRoot *object* changes even if it has the same viewId. But perhaps what we really want is to run the lifecycle method if the backing bean is new, regardless of whether the view-tree is new or not? Looks like we need to more clearly define exactly what "initView" means.... -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.