The Source for Java Technology Collaboration


In order to solve issue 121-JarOrdering, EG member Alexander Smirnov from Exadel suggested we research the current practice of how JSF extension points are used. I took his idea and decided to create a wiki page to collect feedback from the community. Please help us fill out the table. I'll start with the extensions I've done

Human Readable Extension Name faces-config element extended URI or String to type into search engine to find out more
jsf-extensions avatar state-manager http://jsf-extensions.dev.java.net
jsf-extensions flash el-resolver http://jsf-extensions.dev.java.net
closed source custom app el-resolver ryan at ijws dot com
closed source custom app phase-listener ryan at ijws dot com
closed source custom app facelets.RESOURCE_RESOLVER in web.xml ryan at ijws dot com
Seam application-factory http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/jsf/SeamApplicationFactory.java - @FacesConverter, @FacesValidator, hooks for JBoss EL - all slated for JSF2
Seam navigation-handler http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/jsf/SeamNavigationHandler.java
Seam view-handler http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/jsf/SeamViewHandler.java
Seam state-manager http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/jsf/SeamStateManager.java - only used to implement page parameters, which we want to standardize
Seam el-resolver http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/el/SeamELResolver.java - used to integrate JBoss EL, and to add EL functions, both are slated to be included in JSF2
Seam message-bundle http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/core/SeamResourceBundle.java
Seam phase-listener http://fisheye.jboss.org/browse/Seam/trunk/src/main/org/jboss/seam/jsf/SeamPhaseListener.java
JSFUnit faces-context http://fisheye.jboss.org/browse/JSFUnit/trunk/jboss-jsfunit-core/src/main/java/org/jboss/jsfunit/context/JSFUnitFacesContext.java Allows the FacesContext? to live longer for use in unit tests
PrettyFaces? phase-listener http://ocpsoft.com/prettyfaces
PrettyFaces? view-handler http://ocpsoft.com/prettyfaces
PrettyFaces? navigation-handler http://ocpsoft.com/prettyfaces
PrettyFaces? META-INF/faces-config.xml http://ocpsoft.com/prettyfaces
PrettyFaces? faces-context http://ocpsoft.com/prettyfaces
PrettyFaces? el-factory http://ocpsoft.com/prettyfaces
RestFaces? phase-listener https://restfaces.dev.java.net
RestFaces? view-handler https://restfaces.dev.java.net
RestFaces? navigation-handler https://restfaces.dev.java.net
Facelets view-handler (last in chain before implementation) http://facelets.dev.java.net
Tomahawk faces-context (via Faces-Context-Factory) http://myfaces.apache.org, to wrap external-context and encodeResourceURL, encodeActionURL
Orchestra faces-context (via Faces-Context-Factory) http://myfaces.apache.org, to wrap external-context and there for encodeResourceURL, encodeActionURL
cs-JSF faces-servlet, faces-context, navigation-handler, view-handler, el-resolver cs-JSF team (e.g. Alexander Jesse, Martin Marinschek) - faces-servlet (with a hook into Mojarra-logging, cause some error conditions are only logged, not properly treated as errors) to provide proper exception-handling, faces-context to wrap external context and request-parameter map (for white-list validation - every request-parameter needs to be evaluated by the component-tree, if the component-tree does not expect it, there is an error-condition), for javascript-free link support (links are rendered as buttons if javascript is off - if parameters need to be passed, they are encoded in the button-client-id and made available via the request-parameter-map), the faces-context itself to hook into the creation/and the release of the faces-context and create/release a cs-JSF specific context at the same time, external-context to hook into encodeActionURL/encodeResourceURL and pass a specific id for conversations, the application to make sure when a form has already been created currently, no child of the form can be another form (a dummyform implementing NamingContainer? is then created and put into the component tree instead), the view-handler to integrate Facelets and a view-controller, the navigation-handler to support a dialog-system (if inside a specific component, the component-src attribute is changed instead of a full navigation, so parts of the page can be navigated), previous/forward in navigation tree and back/next in page history, el-resolver to support resolving enums and constants
RichFaces? StateManager?.saveView, StateManager?.restoreView These methods have been overwritten to prevent JSR RI incrementing server-side saved viewState id in the case of the AJAX request, because it is not make sense to keep views history for a same page. Also, these methods have additional behavior : they are save and restore special request scope objects like Jboss Seam “conversation” do.
RichFaces? StateManager?.writeState This method have been replaced just only for a MyFaces? 1.2.2+ compatibility, because they use some “hack” to avoid response buffering with server-side state saving.
RichFaces? ViewHandler?.createView This is real hack to get result of transition in the NavigationHandler?.handleNavigation method, because JSF don't have a legal way to get it without real navigation. Used in the special 'include' component which able to change url of the included page by existing JSF actions and navigation rules.
RichFaces? ViewHandler?.writeState This is obsolete workaround for an old JSF 1.1/JSP problem and should be removed in the future version
RichFaces? ViewHandler?.getResourceURL used to handle a special “resource” protocol, like weblets/Trinidad and some other projects do. It's little depend of the ViewHandlers? order and should be replaced by JSF 2.0 resources loading feature
RichFaces? ViewHandler?.renderView This method contains a some important partial rendering logic. I beleave it should be replaced by the JSF 2.0 partial rendering.
RichFaces? LifecycleFactory?, Lifecycle Just only kind of the unified exception handler and debug page generator, used by the special 'log' component. In difference with most other debug features it uses AJAX as a transport. Should be replaced by JSF 2.0 ExceptionHandler? feature.
RichFaces? UIViewRoot? This is an other part of the partial rendering/processing. All lifecycle methods extended to delegate work for a corresponding part of the components tree in the case of partial request
RichFaces? RenderKitFactory?, RenderKit? These classes have been extended to support RichFaces? skinnability feature. This is not a real RenderKit?, but just wrapper for existed ones. It could replace only a few renderers from an active renderkit if the skin require it.
RichFaces? PhaseListener? One listener initializes a some internal framework classes on the first request. This listener removes itself from Lifecycle after init procedure. Should be replaced by the application startap event listener
RichFaces? PhaseListener? Other listener uses as a third important part of the partial request processing. Should be replaced by the JSF 2.0 partial processing
portletbridge FacesContextFactory?, FacesContext? These classes extended for ExternalContext? manipulation only, because JSF have no separate ExternalContextFactory?
portletbridge ExternalContext? portal-specific implementation
portletbridge ViewHandler?.createView In the portal environment, each portlet has own namespace. To avoid clientId conflicts, UIViewRoot? in the portal have to implement NamingContainer? interface and generate its own clientId from portlet namespace. Also, portlet modes support required special viewId processing. Because JSF dos not allow access to the NavigationHandler? viewId calculations, there is a place for a viewMode parameters processing.
portletbridge ViewHandler?.getActionURL In the portal environment this method process EL-expression for a new viewId value, that also related to portlet modes processing
portletbridge ViewHandler?.renderView Little changes in the JSP processing code at the build view
portletbridge PhaseListener? this is Jboss/Richfaces related class only provides support for AJAX requests from portlet page
portletbridge StateManager? This is a terrible hack for access to a value of generated by ResponseStateManager? parameters, becouse they have to be saved in the portlet render parameters map
Custom closed source app ViewHandler? Hack to allow redirect after post using el expression in faces-config.xml
Custom closed source app PhaseListener? Hack to allow redirect after post to propagate request parameters into redirected url
Tobago LifecycleFactory? PartialLifecycle? and Rendering http://svn.apache.org/repos/asf/myfaces/tobago/trunk/core
Tobago FacesContextFactory? FileUpload? http://svn.apache.org/repos/asf/myfaces/tobago/trunk/extension/fileupload/
Tobago RenderKit? Different getRenderer implementation and different ResponseWriter? http://svn.apache.org/repos/asf/myfaces/tobago/trunk/core
Tobago ViewHandler? Fixed a bug JSF 1.1 RI. Ensure Tobago UIViewRoot? JSF 1.1 RI don't create the component via application http://svn.apache.org/repos/asf/myfaces/tobago/trunk/core
Tobago FacesContextFactory? Fixed FacesMessages? ordering for JSF 1.1 RI http://svn.apache.org/repos/asf/myfaces/tobago/trunk/extension/message-fix/
Tobago ApplicationFactory? Allow using JSR 250 (RolesAllowed?, DenyAll?, PermitAll?) for methodBindings in an action. http://svn.apache.org/repos/asf/myfaces/tobago/trunk/extension/security
Myfaces Commons Async Lifecyclye FacesContextFactory?, LifecycleFactory? AsyncLifecycle? for Servlet 3.0(suspend and resume proposal) http://svn.apache.org/repos/asf/myfaces/commons/trunk/myfaces-async-lifecycle/
Trinidad LifecycleFactory? PartialLifecycle? and Rendering Prototype http://svn.apache.org/repos/asf/myfaces/trinidad/trunk_1.2.x/trinidad-partial-lifecycle/
Trinidad TrinidadELResolver? servers some extra els, like requestContext or some extra scope (pageFlowScope)
Trinidad ViewHandlerImpl? checks modifications on timeStamp and deals with org.apache.myfaces.trinidad.render.InternalView API, needs to be defined in web.xml since we don't want it chained
Trinidad StateManagerImpl? StateManager? that handles a hybrid client/server strategy
Trinidad NavigationHandlerImpl? deals with Trinidad dialog framework (like dialog: outcomes)
Trinidad FacesContextFactoryImpl? Internal class that optimizes retrieval of the RenderKit? by caching it on the FacesContext?
Trinidad RenderKitFactory? RenderKitFactory? that implements CoreRenderKit? switching.
Trinidad RenderKit? all Trinidad componets are not html_basic they are a separate renderkit. some htmlBasic stuff is decorated and has some extra optimized responsewriters (like for xml)
Trinidad converters all are overridden to offer better handling (like in dateTime or number) and client side support
Trinidad validators all are overridden to offer client side support
Trinidad PhaseListeners? performs some trinidad logic and provides some hooks.
Custom closed source app facelets.RESOURCE_RESOLVER ServiceLoader? approach to ResourceResolver?, where prefixes in the form of /prefix:/some/thing/here is handled by a different kind of resource resolver that has a prefix associated with it. The different prefixes are loaded using JDK 6 ServiceLoader? class. One prefix we support is "resource" so /resource:/class/path/here can load any data from a jar resource. Also we support a "ui" prefix so /ui:com.package.Classname, the classname is looked at for annotations that tell us how to generate facelets on the fly so we can effectively edit a bean of that class. Works great the annotations specify facelets xhtml files that define where the xhtml content lives.
Custom closed source app ApplicationFactory? Used to make OGNL/MVEL available for EL-Expressions (ioss)
Custom closed source app PhaseListener? Notifies "interested" ManagedBeans? of FacesEvents? (ioss)
Custom closed source app RenderKitFactory? Custom view-state generation and compression for IBM JSF implementation. benedict_chng at yahoo com
Custom closed source app ViewHandler? renders JSF component output inside of a different web framework
Custom closed source app ActionListener? integrates application logic from a different web framework
Custom closed source app ELResolver integrates data model from different web framework
-- Main.edburns - 18 Oct 2008 -- Main.pmuir - 19 Oct 2008 -- Main.bommel - 21 Oct 2008 -- Main.ioss - 21 Oct 2008

Topic JsfExtensionSurvey . { Edit | Ref-By | Printable | Diffs r17 < r16 < r15 < r14 < r13 | More }
 XML java.net RSS

Revision r17 - 07 May 2009 - 04:42:18 - Main.lincolnbaxter
Parents: WebHome > Javaserverfaces