You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by Apache Wiki <wi...@apache.org> on 2006/11/07 01:28:47 UTC
[Shale Wiki] Update of "ShaleViewController" by SimonKitching
Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Shale Wiki" for change notification.
The following page has been changed by SimonKitching:
http://wiki.apache.org/shale/ShaleViewController
The comment on the change is:
Add details about ViewController not in main docs
New page:
== Overview ==
The Shale `ViewController` functionality allows a managed bean to get callbacks on a per-view (ie per-page) basis, in
contrast to the normal callbacks invoked per-component.
== Configuration ==
The jsf configuration files included in the shale-core jarfiles automatically registers the necessary shale objects with
the JSF implementation, so no changes need to be made to web.xml; just placing the shale jarfile in the webapp's WEB-INF/lib
directory is sufficient.
The `ViewViewHandler` class implements the JSF standard `ViewHandler` class. It is installed as a wrapper around the `ViewHandler`
implementation provided by the underlying JSF implementation. It is this class that invokes the setPostBack method on the
`ViewController`.
In order to tell shale's view controller framework which bean to call for each page, it is necessary to define a `ViewControllerMapper` strategy
which creates a managed bean name from the value returned by `UIViewRoot.getViewId()`, ie from the portion of the page url between the webapp
name and the query params. An instance of `DefaultViewControllerMapper` is used by default; see the documentation for that class for details of
the mapping. The managed bean with that name is expected to implement the `ViewController` interface (but see comments on Tiger below).
It is possible to override the default `ViewControllerMapper` simply by defining an application-scoped managed bean with name
"org$apache$shale$view$VIEW_MAPPER" that implements the `ViewControllerMapper` interface.
== Subviews ==
In the Shale 1.0.3 release (latest at the current date) there is no support for callbacks for subviews. This means that even if a page is
composed of multiple other pages (via jsp:include or other mechanism), all page-related callbacks must go through a single managed bean
which introduces undesirable coupling.
The trunk code as at 2006-11-07 contains some code that appears to support a separate ViewController managed bean for each f:subview
in the page by overriding the renderer for subviews to invoke preprocess on processDecodes and prerender on encodeBegin.
== Tiger ==
If the Shale Tiger libraries are present, then a few more features are available. Tiger is specifically for java 1.5 and allows the use
of annotations on ordinary managed beans to mark the view-controller callback methods rather than requiring the managed bean to
implement the `ViewController` interface.
== Implementation Classes ==
* `org.apache.shale.view.faces.ViewController` defines the callbacks available; the managed bean needs to implement this interface in order to get callbacks. Alternately, concrete subclass `AbstractViewController` can be subclassed.
* `org.apache.shale.view.faces.LifecycleListener` invokes the init and destroy callbacks.
* `ViewViewHandler` wraps the standard `ViewHandler` and whenever a view is created (eg restore or forward) it determines which managed bean corresponds to this view and caches this in the current request.
* `ViewPhaseListener` invokes the preprocess/prerender methods on the `ViewController` managed bean located earlier by the `ViewViewHandler`.