7

わかりました、このサイトに参加して以来、初めて StackOverflowError に遭遇しました。これは必須の投稿だと思いました :-)。私の環境は Seam 2.0.1.GA、JBoss 4.2.2.GA で、JSF を使用しています。現在、facelets ビューから JSP に変換して、既存のサイトで使用されている既存の JSP タグを活用しようとしています。faces-config.xml および web.xml 構成ファイルを変更したところ、jsp ページをレンダリングしようとすると、次のエラーが発生するようになりました。誰にも考えはありますか?

2008-09-17 09:45:17,537 DEBUG [org.jboss.seam.contexts.FacesLifecycle] /form_home.jsp の JSF リクエストを開始します 2008-09-17 09:45:17,587 エラー [org.apache.catalina.core. ContainerBase.[jboss.web].[localhost].[/].[Faces Servlet]] サーブレットの Servlet.service() Faces Servlet が org.apache.catalina.core.ApplicationHttpRequest.getAttribute( で例外 java.lang.StackOverflowError をスローしましたApplicationHttpRequest.java:210) org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) org.apache.catalina .core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:222) ...

FaceletsViewHandler がなく、faces-config.xml ファイルが空になりました。

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xi="http://www.w3.org/2001/XInclude"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee  
   http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

</faces-config>

そして私の Web.xml ファイル:

<?xml version="1.0"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <!-- Ajax4jsf -->
 <context-param>
  <param-name>org.richfaces.SKIN</param-name>
  <param-value>blueSky</param-value>
 </context-param>
  <!-- Seam -->
 <listener>
  <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
 </listener>


 <filter>
  <filter-name>Seam Filter</filter-name>
  <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
 </filter>

 <filter-mapping>
  <filter-name>Seam Filter</filter-name>
  <url-pattern>*.jsp</url-pattern>
 </filter-mapping>

 <servlet>
    <servlet-name>Seam Resource Servlet</servlet-name>
     <servlet-class>org.jboss.seam.servlet.SeamResourceServlet
     </servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>Seam Resource Servlet</servlet-name>
   <url-pattern>/seam/resource/*</url-pattern>
 </servlet-mapping>
 <!-- Seam end --> 

 <!-- JSF -->
 <context-param>
        <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
        <param-value>.jsp</param-value>
 </context-param>

 <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>*.jsp</url-pattern> 
 </servlet-mapping>
4

3 に答える 3

9

私はこの問題を理解することができました。Javax.faces.DEFAULT_SUFFIX の .jsp の param-value が Faces Servlet url-pattern (*.jsp) と同じになるように web.xml を構成できないようです。URL パターンを.jspx または /whateverdirnameyouwant/に変更すると、アプリケーションはスタック オーバーフロー エラーなしで起動します。(注: 重要なのは、DEFAULT_SUFFIX と Faces Servlet url-pattern は、それらが何であるかに関係なく同じにすることはできないということです。) これが、この特定の問題を経験した他の人の助けになることを願っています。

于 2008-09-23T16:37:29.760 に答える
2

Java でのスタック オーバーフローは、ほとんどの場合、無限再帰/メソッド呼び出しによって発生します。あなたの場合、スタック トレースを考えると、「getAttribute()」がクラッシュするまで繰り返し呼び出されているようです。私はあなたが使用している特定の環境に精通しているわけではありませんが、.jsp コードにこの種の動作がないかチェックすることをお勧めします (たとえば、互いに呼び出す 2 つのメソッド)。

于 2008-09-18T05:12:55.697 に答える