Мне известно, что JSF может вызывать метод управляемого компонента несколько раз, даже если он вызывается только один раз в .xhtml. Я понимаю, что это связано с * методы.
Я хотел бы попросить вас объяснить мне следующий случай.
У меня есть файл JSF, который выглядит примерно так:
<h:form id="form1">
<h:panelGroup id="output">
...
<h:commandLink...>
<f:ajax render=":form1:output"/>
</h:commandLink>
</h:panelGroup>
</h:form>
Пока все ясно; нажатие на ссылку команды переопределяет часть страницы в форме панели группы.
Код следует:
<ui:repeat value="#{movieBean.categories}" var="category">
<li>
<h:outputLink value="index.xhtml">
<f:param name="categoryId" value="#{category.categoryId}"/>
<h:outputText value="#{category.description}"/>
</h:outputLink>
</li>
</ui:repeat>
#{movieBean.categories} //this is just a 'test line'
movieBean - область запроса.
Теперь, когда я вхожу на страницу в первый раз, я получаю два звонка в movieBean.categories.
Это понятно, потому что он вызывается дважды в коде. Тем не менее, когда я нажал AJAX-рендеринг ссылки
только часть страницы (вывод), я получаю movieBean.categories из <ui:repeat>
, вызываемую еще раз
хотя он находится за пределами частично визуализированной области страницы. «Тестовая линия» на этот раз не вызывается.
Я провел еще один тест. Я удалил тег <ui:repeat>
, оставив только «тестовую строку».
Частичный рендеринг AJAX не называет его как прежде.
Что отличает вызов movieBean.categories внутри тега <ui:repeat>
чем тот, что в «тестовой линии»? И почему звонок внутри <ui:repeat>
осуществляется при нажатии на ссылку AJAX?
несмотря на то, что он снаружи частично отображается <h:panelGroup id="output"/>
тег?