Re: [REVIEW] ConfigureListener - check for FacesServlet before performing faces configuration steps

From: Jacob Hookom <>
Date: Thu, 17 Feb 2005 17:45:22 -0600

I thought there would be a possiblity to determine the mapping of the
request, just by examining the request path info, this could possibly
remove the need to inspect any web.xmls for purposes of serving the
ViewHandler. The only caveat is that the servlet must be hit before
action uri's are generated.

Basically, if extCtx.getRequestPathInfo() == null, then we know it's a
suffix mapping. We can then take the requested URI and grab the suffix
of the incoming request (uri.substring(uri.lastIndexOf('.'))) and
replace it with ViewHandler.DEFAULT_SUFFIX. Otherwise, the requested
servlet is using a prefix mapping and you can grab the
extCtx.getRequestServletPath(). This information is cached within the
ViewHandler for conversion back into Action Ids (.jsp->.jsf).

I've attached support code for a ViewHandler implementation that I
attempted before participating in the RI, it might be something to look at?

-- Jacob Hookom (McKesson Medical)

Adam Winer wrote:

> Ed Burns wrote:
>>>>>>> On Thu, 17 Feb 2005 15:42:01 -0500, Ryan Lubke
>>>>>>> <Ryan.Lubke_at_Sun.COM> said:
>> RL> Consider the case where JSF is installed in the common
>> classloader of RL> Tomcat, or SJSAS.
>> RL> With this configuration, the ConfigureListener will be invoked
>> for every RL> web application
>> RL> whether or not it uses JSF.
>> RL> This modification to ConfigureListener will process the web.xml
>> of the RL> current web application
>> RL> scanning for the presence of javax.faces.webapp.FacesServlet. If
>> found, RL> perform the normal
>> RL> application processing, otherwise return.
>> As it turns out, an app is not required to map the FacesServlet by the
>> spec.
> IIRC, ViewHandlerImpl in the RI does in fact look for
> FacesServlet to figure out servlet mappings, so there is
> currently a requirement to use FacesServlet. That hard
> dependency is not necessary, because ViewHandlerImpl could simply
> look for *all* servlet mappings, and whichever servlet
> mapping corresponds to the current request is necessarily
> the correct servlet, whether or not it's FacesServlet.
>> Check out
>> <>.
>> So, I think we should consider developing a very robust heuristic, of
>> which "does it map the FacesServlet?" is a part. How about:
>> If any of the following are true, we know this app definately uses
>> Faces.
>> * It maps the FacesServlet
>> * It has a faces-config (or similar) file (check the init param)
>> If neither of these are true, you probably don't have a faces app.
>> What do you all think?
> Seems viable.
> -- Adam
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> For additional commands, e-mail:

Jacob Hookom - Minneapolis