JSF пропускает фазы - как это отладить? - PullRequest
3 голосов
/ 26 апреля 2010

Я отлаживаю стороннее приложение JSF. Проблема в том, что я отправляю форму, но значения не переносятся.

С помощью слушателя фазы я вижу, что жизненный цикл не проходит полностью, так что он пропускает фазы 2 -5: после фазы просмотра восстановления вызывается фаза ответа рендеринга. Я скучаю по применяемым значениям, проверке, обновлению действий модели и т. Д.

Итак, это может быть проблема курицы и яйца: 1. Ответственные фазы не вызываются, поэтому ввод новой формы не может быть перенесен. 2. Система не распознает никаких новых входных данных и, следовательно, непосредственно рендерится после восстановления представления.

Я проверил, что нет вызова responseComplete () или renderResponse ().

Я застрял как-то. Любая идея, чтобы проверить одну из двух гипотез? Или как это вообще отладить? У кого-нибудь была похожая проблема?


Обновление

У меня есть подозрение, что JSF не знает о запросе обратной передачи и обрабатывает его как начальное представление . Это объясняет, что я прохожу только фазы 1 и 6.

Как я могу проверить, распознает ли JSF это как запрос без лиц ?
Как я могу проверить, есть ли соответствующий treeID в текущем facesContext.

Ответы [ 2 ]

6 голосов
/ 26 апреля 2010

Я цитирую ответ, который я разместил до :

Всякий раз, когда UICommand компонент не может вызвать соответствующее действие, проверьте следующее:

  1. UICommand компоненты должны быть размещены внутри UIForm компонента (например, h:form).
  2. Вы не можете вкладывать несколько UIForm компонентов друг в друга (будьте осторожны с включаемыми файлами!).
  3. Ошибка проверки / преобразования не должна была возникнуть (используйте h:messages чтобы получить их все).
  4. Если UICommand компоненты находятся внутри UIData компонента, убедитесь, что точно так же DataModel (объект за UIData 'value атрибут) сохраняется.
  5. Атрибуты rendered и disabled компонента и всего родительские компоненты не должны оцените false во время применения фаза запроса значений.
  6. Убедитесь, что нет PhaseListener или каких-либо EventListener в Цепочка запрос-ответ изменила Жизненный цикл JSF для пропуска вызова фаза действия.
  7. Убедитесь, что в том же запросе-ответе нет Filter или Servlet цепочка заблокировала запрос FacesServlet как-то.

Поскольку в вашем конкретном случае фазы 2-5 пропущены, и вы уверены (?), Что FacesContext#renderResponse() не вызван, причины 3, 6 и 7 можно вычеркнуть из списка. Причины 4 и 5 также могут быть устранены, в зависимости от того, как вы отлаживали фазы JSF. Расследуйте другие причины. Мои центы по причине 2. Проверьте, не видите ли вы <form><form></form></form> в сгенерированном источнике HTML, и верните это в исходный код JSF.

0 голосов
/ 29 апреля 2010

Нашли решение! Я извиняюсь, но это было очень специфично для приложения. Это вызвало эту странную ошибку. Получил исправление StateManager и все работало нормально. Это горько и стоит много времени: - (

Спасибо за помощь в любом случае: -)

...