The JavaServer Faces framework built on the Model-View-Controller (MVC) design pattern. The main advantage of using MVC is to separate the view tier from the Model tier and thus making it easy to extend the capabilities and integrate with other frameworks easily without disturbing each other.
The communication between the model and view tier handled by the Faces Servlet which acts as the controller part. The JSF pages forms as the building blocks of the view tier.
Each client's view will be formed in the tree like structure by the JSF framework and uniquely distinguish them using the View Id associated with it.
When the request is submitted by the client requesting to serve a particular page, JSF controller will check if that particular view already exists on either client side (as part of the page submitted, a hidden parameter) or the server side. If the view already exists, it loads the view and does the further processing (Refer Life Cycle of JSF). It the view does not exists, it creates a new view from the request and renders the response.