JSFページのレンダリング中にStackOverflowError
を受け取っています。これは、特定のデータセットをロードした後(正常に実行された後)、ページ上で何か他の操作を行った後に発生します。エラーが発生した後にページがリフレッシュされると、ページが正しく読み込まれることに注意してください。このページは完璧に動作し、エラー状態でロードされたレコードよりも多くのレコードをロードすることができます。JSF - MyFaces - Stack Overflow Error
手順によっては、エラーメッセージが多少異なる場合がありますが、エラーは常に表示されます。
私はMyFaces 1.2を使用しています(現時点ではアップグレードできません)。
これはソリューションの共通の問題ですか?
例1:
java.lang.StackOverflowError
at java.lang.ClassLoader.findLoadedClass(ClassLoader.java:947)
at java.lang.ClassLoader.loadClass(ClassLoader.java:291)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.FilteringClassLoader.findClass(FilteringClassLoader.java:101)
at weblogic.utils.classloaders.FilteringClassLoader.loadClass(FilteringClassLoader.java:86)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:295)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:45)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
at com.sun.el.parser.AstIdentifier.getValue(Unknown Source)
at com.sun.el.parser.AstDeferredExpression.getValue(Unknown Source)
at com.sun.el.parser.AstCompositeExpression.getValue(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
...
例2:
java.lang.StackOverflowError
at javax.el.ELContext.(ELContext.java:222)
at com.sun.el.lang.EvaluationContext.(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
at com.sun.el.parser.AstIdentifier.getValue(Unknown Source)
at com.sun.el.parser.AstDeferredExpression.getValue(Unknown Source)
at com.sun.el.parser.AstCompositeExpression.getValue(Unknown Source)
at com.sun.el.ValueExpressionImpl.getValue(Unknown Source)
at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
...
アップデート:私は、問題を修正しました。標準ヘッダーコードに問題がありました。すべてのパラメーターが嫌いでした。私は以下の失敗したコードを書きませんでしたが、私はそれを修正する必要があります。 (StackOverflowErrorブレークポイントがヒットした)Eclipseでスタックをチェックすると、(a)行と(b)行の間で循環していた(いずれもTagValueExpression.getValue(..)
になる)。
<c:forEach var="attr" items="#{request.parameterMap}">
<c:if test="#{empty flag}">
(a) <c:set var="parameters" value="#{parameters}&"/>
</c:if>
<c:set var="flag" value=""/>
(b)<c:set var="parameters" value="#{parameters}#{attr.key}=#{attr.value[0]}"/>
</c:forEach>
迅速な対応に感謝します。残念ながら、私は 'value'ベースのバインディングしか持っていません - ページに' binding'パラメータはありません。私は 'value ="#{bean.param} "と' value = "#{tableLoopItem.param}"といくつかの 'rendered =#{tableLoopItem.booleanParam}'だけを使用します。 – OddProblems
これは最も一般的な原因のほんの一例に過ぎず、問題をよりよく理解することができます。これで、あなたのページで自己参照表現を探す必要があります。皆さんがどのようなコードを持っているのかわからないので、これを行うことはできません。 – BalusC
問題に修正の詳細を追加しました。あなたの答えは正しい解決策に近く、将来的には他の貧しい人々を助けてくれるはずです。 – OddProblems