I asked about this a few days ago, but I'm not making any progress on
this. I'd appreciate any hints on what I might be doing wrong.
I have a simple app using the default JSF 1.1 implementation in WebLogic
9.2.2, which also uses RichFaces 3.1.3. It works at this point.
I exported the WAR file and I added to the WEB-INF/lib all the libraries
that come with the MyFaces 1.1.5 distribution, resulting in the
following:
* commons-beanutils-1.7.0.jar
* commons-codec-1.3.jar
* commons-collections-3.2.jar
* commons-digester-1.6.jar
* commons-el-1.0.jar
* commons-lang-2.1.jar
* commons-logging-1.0.4.jar
* jstl-1.1.0.jar
* myfaces-api-1.1.5.jar
* myfaces-impl-1.1.5.jar
* richfaces-api-3.1.3.GA.jar
* richfaces-impl-3.1.3.GA.jar
* richfaces-ui-3.1.3.GA.jar
I then re-jared the WAR file, and then copied it to the Tomcat 5.5.25
webapps dir. It deployed. I then tried to go to the URL for the app,
and Tomcat very quickly hit a StackOverflow error.
The Catalina log had the following log info and exception:
------------------
Jan 23, 2008 8:54:12 PM
org.apache.myfaces.shared_impl.config.MyfacesConfig
getBooleanInitParameter
INFO: No context init parameter 'org.apache.myfaces.PRETTY_HTML' found,
using default value true
Jan 23, 2008 8:54:12 PM
org.apache.myfaces.shared_impl.config.MyfacesConfig
getBooleanInitParameter
INFO: No context init parameter 'org.apache.myfaces.ALLOW_JAVASCRIPT'
found, using default value true
Jan 23, 2008 8:54:12 PM
org.apache.myfaces.shared_impl.config.MyfacesConfig
getBooleanInitParameter
INFO: No context init parameter
'org.apache.myfaces.READONLY_AS_DISABLED_FOR_SELECTS' found, using
default value true
Jan 23, 2008 8:54:12 PM
org.apache.myfaces.shared_impl.config.MyfacesConfig getCurrentInstance
INFO: Tomahawk jar not available. Autoscrolling, DetectJavascript,
AddResourceClass and CheckExtensionsFilter are disabled now.
Jan 23, 2008 8:54:12 PM
org.apache.myfaces.shared_impl.config.MyfacesConfig getCurrentInstance
INFO: Starting up Tomahawk on the MyFaces-JSF-Implementation
Jan 23, 2008 8:54:14 PM
org.apache.myfaces.lifecycle.PhaseListenerManager
informPhaseListenersAfter
SEVERE: Exception in PhaseListener RENDER_RESPONSE(6) afterPhase
java.lang.NullPointerException
at
org.ajax4jsf.context.AjaxContextImpl.getSubmittedRegionClientId(AjaxCont
extImpl.java:574)
at
org.ajax4jsf.context.AjaxContextImpl.isAjaxRequest(AjaxContextImpl.java:
474)
at
org.ajax4jsf.context.AjaxContextImpl.isAjaxRequest(AjaxContextImpl.java:
466)
at
org.ajax4jsf.event.AjaxPhaseListener.afterPhase(AjaxPhaseListener.java:7
8)
------------------
Looking in the RichFaces source code, line 466 is the one line in this
method:
public boolean isAjaxRequest() {
return isAjaxRequest(FacesContext.getCurrentInstance());
}
So, for whatever reason, "FacesContext.getCurrentInstance()" is null.
In the "localhost" log, there was the following extremely truncated
exception (it went on forever, repeating the top two stack entries):
---------------
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.StackOverflowError
at
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletReque
stWrapper.java:216)
at
org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHt
tpRequest.java:545)
at
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletReque
stWrapper.java:216)
at
org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHt
tpRequest.java:545)
---------------
If it helps, here is my faces-config.xml and web.xml:
---------------------
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>TabPanel</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<context-param>
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.validateXml</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>com.sun.faces.verifyObjects</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>
Validate managed beans, navigation rules and
ensure that forms are not nested.
</description>
<param-name>org.apache.myfaces.VALIDATE</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>A class implementing the
org.apache.myfaces.shared.renderkit.html.util.AddResource
interface. It is responsible to
place scripts and css on the right position in
your HTML document.
Default:
"org.apache.myfaces.shared.renderkit.html.util.DefaultAddResource"
Follow the description on the MyFaces-Wiki-Performance page
to enable
StreamingAddResource instead of DefaultAddResource if you
want to
gain performance.
</description>
<param-name>org.apache.myfaces.ADD_RESOURCE_CLASS</param-name>
<param-value>org.apache.myfaces.renderkit.html.util.DefaultAddResource</
param-value>
<!--param-value>org.apache.myfaces.component.html.util.StreamingAddResou
rce</param-value-->
</context-param>
<context-param>
<description>
A very common problem in configuring MyFaces-web-applications
is that the Extensions-Filter is not configured at all
or improperly configured. This parameter will check for a
properly
configured Extensions-Filter if it is needed by the web-app.
In most cases this check will work just fine, there might be
cases
where an internal forward will bypass the Extensions-Filter and
the check
will not work. If this is the case, you can disable the check by
setting
this parameter to false.
</description>
<param-name>org.apache.myfaces.CHECK_EXTENSIONS_FILTER</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<description>
Change the url-pattern from the ExtensionsFilter
Default is "/faces/myFacesExtensionResource"
Note: The filter-mapping for ExtensionsFilter, the url-pattern
is
this value + "/*", else there comes a exception
</description>
<param-name>org.apache.myfaces.RESOURCE_VIRTUAL_PATH</param-name>
<param-value>/faces/extensionResource</param-value>
</context-param>
<context-param>
<param-name>org.richfaces.SKIN</param-name>
<param-value>blueSky</param-value>
</context-param>
<filter>
<display-name>RichFaces Filter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>richfaces</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
<!--
<listener>
<listener-class>
com.sun.faces.config.ConfigureListener
</listener-class>
</listener>
-->
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>35</session-timeout>
</session-config>
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>txt</extension>
<mime-type>text/plain</mime-type>
</mime-mapping>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</web-app>
---------------------
---------------------
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
<application>
<locale-config>
<default-locale>en</default-locale>
</locale-config>
</application>
<managed-bean>
<managed-bean-name>ratingRequest</managed-bean-name>
<managed-bean-class>com.wamu.ais.tabpanel.RatingRequestBean</managed-bea
n-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<lifecycle>
<phase-listener>com.wamu.ais.tabpanel.LifeCycleListener</phase-listener>
<phase-listener>com.wamu.ais.tabpanel.CacheControlPhaseListener</phase-l
istener>
</lifecycle>
</faces-config>
---------------------