Я знаю, что JSF может вызывать метод управляемого компонента пару раз, даже если он вызывается только один раз в .xhtml. Я понимаю, что это связано с методами encode*.
Я хотел бы попросить Вас объяснить мне следующий случай. У меня есть файл JSF, который выглядит так:
<h:form id="form1">
<h:panelGroup id="output">
...
<h:commandLink...>
<f:ajax render=":form1:output"/>
</h:commandLink>
</h:panelGroup>
</h:form>
Пока все ясно; нажатие командной ссылки перерисовывает часть страницы в форме panelGroup. Код следующий:
<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"/>
?
?
) редактора сообщений. Экранирование тегов HTML неуклюже и абсолютно не нужно :) - person BalusC   schedule 16.12.2011