Я делаю свой первый составной компонент в JSF, но я в тупик от ревердера, который ведет себя странно. Вот реализация компонента (это означает, что всплывающее окно):Комбинированный компонент JSF Rerender: insertChildren
<composite:implementation>
<h:outputScript name="nb-popup.js" library="js"/>
<h:outputStylesheet name="nb-popup.compiled.css" library="style"/>
<div id="#{cc.clientId}_container" class="nb_popup_container">
<div style="width:#{cc.attrs.width};height:#{cc.attrs.height};" id="#{cc.clientId}" class="nb_popup">
<div id="#{cc.clientId}_header" class="nb_popup_header">
<span class="nb_popup_header_content">
<composite:renderFacet name="header"/>
</span>
<span class="nb_popup_header_controls">
<composite:renderFacet name="controls"/>
</span>
</div>
<div id="#{cc.clientId}_content" class="nb_popup_content">
<composite:insertChildren/>
</div>
</div>
</div>
<script>popup('#{cc.clientId}');</script>
</composite:implementation>
Для примера скажем, мы имеем:
<nb:popup id="extract">
test
</nb:popup>
Сгенерированный HTML ОК:
<div id="extract_container" class="nb_popup_container">
<div style="width:auto;height:auto;" id="extract" class="nb_popup">
<div id="extract_header" class="nb_popup_header">
<span class="nb_popup_header_content">
</span>
<span class="nb_popup_header_controls">
</span>
</div>
<div id="extract_content" class="nb_popup_content">
test
</div>
</div>
</div>
Теперь предположим, У меня есть кнопка:
<h:commandLink value="reload">
<f:ajax render=":extract"/>
</h:commandLink>
После нажатия на нее, я получаю следующий частичный ответ, когда фактическое содержание явно не там, где он должен быть:
<div id="extract_container" class="nb_popup_container">
<div style="width:auto;height:auto;" id="extract" class="nb_popup">
<div id="extract_header" class="nb_popup_header">
<span class="nb_popup_header_content">
</span>
<span class="nb_popup_header_controls">
</span>
</div>
<div id="extract_content" class="nb_popup_content">
</div>
</div>
</div>
<script>popup('extract');</script>
test
]]>
Теперь предположим, что я двигаю insertChildren к заголовку:
<div id="#{cc.clientId}_header" class="nb_popup_header">
<span class="nb_popup_header_content">
<composite:renderFacet name="header"/>
<composite:insertChildren/>
</span>
<span class="nb_popup_header_controls">
<composite:renderFacet name="controls"/>
</span>
</div>
Начальная нагрузка снова, как это должно быть:
<div id="extract_header" class="nb_popup_header">
<span class="nb_popup_header_content">
test
</span>
<span class="nb_popup_header_controls">
</span>
</div>
Но перезагрузкой содержание перемещается еще раз:
<div id="extract_header" class="nb_popup_header">
<span class="nb_popup_header_content">
</span>
<span class="nb_popup_header_controls">
test
</span>
</div>
Любая идея, что может вызвать это, казалось бы, случайное размещение insertChildren после ajax rerender?
Что Mojarra версии вы используете? Вы пробовали последнее? – BalusC
Я использовал 2.1.8, но обновлялся до 2.1.13, и проблема не устранена. Существует ряд вопросов, связанных касательно и до сих пор открытых (см. Ответ) – nablex