java.lang.StackOverflowError
...
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)
...
Итак, некоторое выражение EL ссылается на само и, таким образом, работает в бесконечном цикле рекурсии, вызывая переполнение стека.
Вот одна из наиболее распространенных причин, котораядолжно быть достаточно простым, чтобы понять проблему:
<h:inputText binding="#{input}" value="#{input.value}" />
В приведенном выше примере #{input}
относится к самому компоненту.#{input.value}
относится к атрибуту value
.Но если вы используете его в самом атрибуте value
, то при этом сохраняется обратная ссылка на атрибут value
в бесконечном цикле рекурсии.В таком случае вам нужно исправить это, привязав значение к полноценному свойству управляемого компонента.
Проверьте свои страницы на наличие логических ошибок такого рода.Между прочим, не имеет значения, привязан ли компонент к управляемому компоненту или нет, он не сможет работать так же хорошо:
<h:inputText binding="#{bean.input}" value="#{bean.input.value}" />
Затем следует использовать
<h:inputText binding="#{bean.input}" value="#{bean.value}" />
Илиможет быть, только это
<h:inputText binding="#{bean.input}" />
или даже только это, в зависимости от конкретных функциональных требований
<h:inputText value="#{bean.value}" />