Согласно документации, это должен быть самый простой в мире продукт для использования:
Просто добавьте icefaces.jar в приложение, и к странице будет применен рендеринг Direct-to-Dom (D2D).
Но даже их самый основной учебник Начало работы с ICEfaces 2 не работает. Я загрузил код внизу страницы, встроил его в WAR и развернул на Tomcat 6.0.32 и Tomcat 7.0.14. Первое, что я заметил, было то, что по какой-то причине составной компонент не работал:
/ job-Applic.xhtml @ 39,78 Следующие атрибуты являются обязательными, но для них не было предоставлено значений: id.
Но это больше похоже на проблему с JSF ( JSF 2 Компонент обязательный атрибут бросает исключение ), поэтому я решил эту проблему, удалив обязательный атрибут ID (хотя все равно обязательный = "true" "на стоимости, которая, кажется, не имеет проблемы). Во всяком случае, теперь приложение развертывается. И, как уже говорилось, он использует вызов AJAX, когда вы нажимаете кнопку «Очистить», в результате чего получается полный DOM для формы в XML-ответе. Следующим шагом является добавление icefaces.jar, и предполагается, что он добавит функциональность Direct-to-DOM, которая обеспечит отправку в ответ только различий:
ICEfaces 2 отображает разметку компонента в DOM на стороне сервера (объектная модель документа), которая отражает текущее представление клиента. Каждый раз, когда жизненный цикл JSF запускается, выполняется сравнение DOM, и, если есть какие-либо изменения, краткий набор обновлений страницы отправляется обратно клиенту для применения к странице. Мы называем это Direct-to-DOM или D2D рендерингом.
Тем не менее, я получаю полную форму в качестве ответа, а также некоторые дополнительные строки ICEfaces вроде этого:
<input name="ice.window" type="hidden" value="epgo74zmvc" />
<input name="ice.view" type="hidden" value="vs4ik661" />
Так ясно, что ICEfaces что-то делает, но НЕ то, что обещал. Это на самом деле длиннее, чем простой ответ AJAX. Поэтому, игнорируя тот факт, что это действительно более широкий ответ, я перешел к следующему обещанию:
При рендеринге Direct-to-DOM нам больше не нужен тег f: ajax, вложенный в нашу кнопку «Очистить»
Звучит прямо, верно? В примере на странице они просто перемещают выражение EL для слушателя из тега f: ajax в тег h: commandButton. Проблема в том, что сигнатуры методов разные. Предполагается, что это учебное пособие Getting Started , но на самом деле вам все равно, как пройтись по шагам. В любом случае, я могу это исправить, изменив сигнатуру метода clearForm в компоненте поддержки, чтобы его аргумент был теперь и ActionEvent вместо AjaxBehaviorEvent. Делая это, ICEfaces фактически заменяет то, что было бы действием целой страницы, действием AJAX, что довольно невероятно, но у меня все еще есть кислый вкус во рту. У кого-нибудь есть идеи, почему D2D не работает? Я делаю что-то неправильно? Стоит ли мне еще использовать ICEfaces?