我正在JSF中創建我的第一個複合組件,但我被一個行爲奇怪的重新渲染難住了。下面是組件實現(它的意思是一個彈出窗口):JSF重新渲染複合組件: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是OK:
<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重新渲染?
?你嘗試過最新的? – BalusC
我使用2.1.8,但升級到2.1.13,問題依然存在。有許多問題與切線有關並且仍然是開放的(見答案) – nablex