我在呈現JSF頁面時收到StackOverflowError
。它發生在加載一組特定的數據(成功發生)之後,然後在頁面上做其他事情。請注意,如果錯誤發生後刷新頁面,頁面將正確加載。該頁面完美工作,否則可以加載更多的記錄,而不是在錯誤狀態下加載的記錄。JSF - MyFaces - 堆棧溢出錯誤
根據所採取的步驟,錯誤信息可能略有不同,但錯誤將始終顯示。
我正在使用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)
...
更新:我已解決了這一問題。標準頭文件中存在一個問題 - 它不喜歡所有的參數。我沒有寫下面的失敗代碼,但我必須修復它。 在Eclipse中檢查堆棧(當StackOverflowError斷點被擊中時),它在(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>
感謝您的快速響應。不幸的是,我只有'基於價值'的綁定 - 頁面上沒有'binding'參數。我只使用'value =「#{bean.param}」''和'value =「#{tableLoopItem.param}」'以及一些'rendered =#{tableLoopItem.booleanParam}'。 – OddProblems 2012-03-06 16:21:36
這只是最常見原因的一個例子,所以可以更好地理解問題。現在您需要在頁面中查找自引用表達式。我們不能這樣做,因爲我們不知道你們都有什麼代碼。 – BalusC 2012-03-06 16:22:43
我已將修復詳細信息添加到問題中。你的回答接近正確的解決方案,並有望在未來幫助其他可憐的靈魂。 – OddProblems 2012-03-07 21:58:11