Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF-MyFaces-Stack溢出错误_Jsf_Myfaces - Fatal编程技术网

JSF-MyFaces-Stack溢出错误

JSF-MyFaces-Stack溢出错误,jsf,myfaces,Jsf,Myfaces,在呈现JSF页面时,我收到一个StackOverflowerError。它发生在加载一组特定的数据(成功完成)然后在页面上执行任何其他操作之后。请注意,如果在错误发生后刷新页面,则页面将正确加载。否则,该页面工作正常,能够加载比错误条件下加载的记录更多的记录 根据所采取的步骤,错误消息可能略有不同,但错误将始终出现 我正在使用MyFaces 1.2(此时无法升级) 这是解决方案的常见问题吗 例1: java.lang.StackOverflowError at java.lang.ClassLo

在呈现JSF页面时,我收到一个
StackOverflowerError
。它发生在加载一组特定的数据(成功完成)然后在页面上执行任何其他操作之后。请注意,如果在错误发生后刷新页面,则页面将正确加载。否则,该页面工作正常,能够加载比错误条件下加载的记录更多的记录

根据所采取的步骤,错误消息可能略有不同,但错误将始终出现

我正在使用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中检查堆栈(当StackOverflowerError断点被命中时),它在(a)行和(b)行之间循环(这两行都命中了
TagValueExpression.getValue(…)


(a)
(b)
因此,一些EL表达式引用了本身,因此在无限递归循环中运行,导致堆栈溢出

以下是最常见的原因之一,应足够简单,以理解问题:

<h:inputText binding="#{input}" value="#{input.value}" />
然后你应该使用

<h:inputText binding="#{bean.input}" value="#{bean.value}" />

或者就是这个

<h:inputText binding="#{bean.input}" />

或者仅仅是这个,取决于具体的功能需求

<h:inputText value="#{bean.value}" />


感谢您的快速回复。不幸的是,我只有基于
value
的绑定-页面上没有
binding
参数。我只使用
value=“#{bean.param}”
value=“#{tableLoopItem.param}”
以及一些
rendered=#{tableLoopItem.booleanParam}
。这只是最常见原因的一个例子,以便更好地理解问题。现在,您需要在页面中查找自引用表达式。我们不能这样做,因为我们不知道你们都有什么代码。我已经在问题中添加了修复细节。你的答案接近正确的答案,希望将来能帮助其他可怜的人。
<h:inputText binding="#{bean.input}" value="#{bean.value}" />
<h:inputText binding="#{bean.input}" />
<h:inputText value="#{bean.value}" />