В настоящее время мы пытаемся перейти на JSF 2.0 с JSF 1.2, и одна из проблем, с которыми мы столкнулись, заключается в невозможности повторного рендеринга части страницы, содержащей форму. это (перерендерить externalDiv
или сами формы):
<h:panelGroup id="outerDiv">
<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
</h:panelGroup>
Я имею в виду, что если я обновлю externalDiv
все обновится, но сама форма (или формы) будет сломана и будет вести себя как минимум странно ajax-вызовы либо не работают при первом запуске, либо вместо вызова какого-либо метода bean-компонента они создают новый экземпляр этого bean-компонента и ничего не делают (либо уничтожая предыдущий при каждом вызове, либо просто создавая новый при первом вызове, а затем ничего не делать).Проблема может быть решена путем повторного рендеринга только компонентов внутри формы, например так (обновление innerDiv1
и innerDiv2
):
<h:panelGroup id="outerDiv">
<h:form id="form1">
<h:panelGroup id="innerDiv1">...</h:panelGroup>
</h:form>
<h:form id="form2">
<h:panelGroup id="innerDiv2">...</h:panelGroup>
</h:form>
</h:panelGroup>
но у нас есть много мест, где мы включаем некоторые страницы с ui:include
и не очень удобно заглядывать внутрь этой страницы и обновлять там какие-то компоненты. Кроме того, нам придется изменить все эти страницы, так как многие из них не имеют общего div-оболочки внутри форм, а обновление каждого компонента по отдельности будет очень громоздким и подверженным ошибкам.
Итак, можно ли заставить JSF 2.0 правильно обновлять часть страницы с 1-м подходом, как это было в JSF 1.2?
РЕДАКТИРОВАТЬ: похоже, проблема с рендерингом формы связана с Richfaces 4.2, поскольку я использую a4j:ajax
(преемник a4j:support
, который использовался с Richfaces 3.3.3) и настраиваемые кнопки на основе rich:commandButton
. Когда я заменил их собственными формами jsf f:ajax
, кажется, что они обновлены правильно. Но проблема с внешним div все еще актуальна