У меня динамическое диалоговое окно
<p:dialog
dynamic="true"
closeOnEscape="true"
id="modalID"
modal="true"
>
<p:outputPanel rendered="#{empty testBean.someArrayList}">
empty
</p:outputPanel>
</p:dialog>
Когда я включаю этот диалог на страницу, testBean не инициализируется - отлично, это то, что я хочу.Он инициализируется только когда я показываю диалоговое окно.
Однако, когда я включаю в диалог ap: dataTable:
<p:dialog
dynamic="true"
closeOnEscape="true"
id="modalID"
modal="true"
>
<p:outputPanel>
<p:dataTable rendered="#{not empty testBean.someArrayList}" value="#{testBean.someArrayList}" var="item">
<p:column>
#{item}
</p:column>
</p:dataTable>
</p:outputPanel>
</p:dialog>
Инициализируется testBean и вызывается testBean.getSomeArrayList ()бэк.Я прочитал, что это в случае с UI: включает в себя (см. Запуск диалогов с помощью PrimeFaces череза также) но почему это так с ap: dataTable?Btw.размещение рендеринга вокруг p: dataTable также не решило проблему.
Какие варианты у меня должны быть, чтобы testBean не инициализировался сразу?Я мог бы использовать c: если, но из моего опыта вы можете получить странные результаты, когда вы смешиваете JSTL и JSF.Обычно я использую его только для исключения материалов, которые не будут отображаться (даже после некоторых запросов ajax).Когда я использовал его ранее с ajax, он работал, но мог вызвать неожиданные проблемы.
Другой вариант, который я мог видеть, это использовать пользовательский интерфейс: include с динамическим src, например,
<p:dialog
dynamic="true"
closeOnEscape="true"
id="modalID"
modal="true"
>
<p:outputPanel id="updateMeWhenOpeningModal">
<ui:insert src="#{dialogManager.testBeanSrc}"/>
</p:outputPanel>
</p:dialog>
И затемизмените testBeanSrc с пути к пустому файлу на файл, содержащий p: dataTable.
Есть ли другие решения?Какой из них будет иметь наименьшее количество побочных эффектов?