Моя цель - динамически загружать содержимое компонента в JSF 2.0.Вариант использования таков: пользователь нажимает какую-то кнопку, которая открывает модальную панель с большим объемом содержимого через AJAX.Из-за его «тяжести» я хочу отложить его загрузку до тех пор, пока / или пользователю это не понадобится.Если пользователь закрывает эту панель, она фактически не удаляется из DOM, а просто исчезает.Если пользователь снова нажимает кнопку инициализации, отображается ранее загруженная панель.
Я знаю, что могу предотвратить рендеринг содержимого, используя rendered="#{cc.attrs.visibilityState == 'hidden'}"
, и что я могу повторно визуализировать компонент с помощью вызова JSF AJAX.Тем не менее, как я могу настроить атрибуты составного компонента на лету так, чтобы второй раз вокруг компонента фактически отображался?
1) Я знаю, что могу сделать:
<h:outputLink>Foo
<f:ajax event="click" render="theComponentIWantToUpdate" listener="#{someBean.someMethod()}" />
</h:outputLink>
А затем программно настроить атрибуты theComponentIWantToUpdate
(чтобы изменить значение #{cc.attrs.visibilityState}
) так, чтобы он фактически отображался с полным содержимым.Но как на самом деле это сделать?
2) Кроме того, проблема в том, что я не хочу обновлять (перерисовывать) theComponentIWantToUpdate
при каждом нажатии кнопки, только в первый раз (см.бизнес-кейс).Как я могу установить оценку для <f:ajax />
вызова для этого?У него есть атрибут disabled
, но он только указывает, нужно ли на самом деле отображать обработчик AJAX (не обрабатывается при каждом нажатии ссылки).
3) Кроме того, я, вероятно, хочу сделать несколько пользовательскихСначала javascript при нажатии на ссылку, и только выполнить запрос AJAX через javascript, используя jsf.ajax.request()
.Однако эта функция не поддерживает предоставление атрибута listener
, поэтому я не знаю, как выполнить метод вспомогательного компонента с необработанным вызовом javascript jsf.ajax.request()
?На самом деле есть похожий вопрос без подходящих ответов (см. JSF 2.0 AJAX: jsf.ajax.request для вызова метода, а не только для повторного отображения области страницы ).