Я получаю StackOverflowError
при рендеринге страницы JSF. Это происходит после загрузки определенного набора данных (что происходит успешно), а затем делает что-либо еще на странице. Обратите внимание, что страница будет загружаться правильно, если она обновляется после возникновения ошибки. Страница работает совершенно иначе и может загружать больше записей, чем загружается в состояние ошибки.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>
Спасибо за быстрый ответ. К сожалению, у меня есть только привязки на основе value. На странице нет параметра 'binding'. Я использую только 'value =" # {bean.param} "и' value = "# {tableLoopItem.param}", а также несколько 'rendered = # {tableLoopItem.booleanParam}'. – OddProblems
Это был всего лишь пример наиболее распространенной причины, так что проблема может быть лучше понята. Теперь вам нужно искать выражения для саморегуляции на ваших страницах. Мы не можем этого сделать, поскольку мы не знаем, какой у вас код. – BalusC
Я добавил детали исправления к вопросу. Ваш ответ был близок к правильному решению и, надеюсь, поможет другим бедным людям в будущем. – OddProblems