我在我的頁面上使用了<p:accordionPanel dynamic="true">
。提交頁面時,未加載對象的屬性將獲得應用的空值。我不想要這種行爲,因爲這些值在數據庫和服務器端是正確的。爲什麼在瀏覽器中不顯示它們會導致在服務器端將它們置零。我認爲這個值不應該應用,因爲它們還沒有被渲染。對象的屬性在延遲加載的AccordionPanel組件上更新爲null
我XHTML(片段):
<p:accordionPanel dynamic="true" value="#{controller.selectedObject.list}" var="listItem">
<p:selectOneMenu value="#{list.market}" disabled="#{controller.selectedObject.isDisabled}">
<f:selectItems value="#{marketSelectItems.selectItems}" />
</p:selectOneMenu>
</p:accordionPanel>
假設controller.selectedObject.list
包含BeanA
,兩者有一個充滿財產market
兩個條目。
現在有controller.selectedObject.isDisabled
設置爲true我的日誌狀態時:
10:21:12,565 TRACE [de.bss.dm.kairos.gui.phaselistener.AnyPhaseListener:25] UPDATE_MODEL_VALUES 4 before Phase
10:21:12,577 TRACE [de.bss.dm.kairos.gui.phaselistener.AnyPhaseListener:20] UPDATE_MODEL_VALUES 4 after Phase
,一切工作正常,值保持分配。
有controller.selectedObject.isDisabled
設置爲false我的日誌狀態時,但是:
10:21:51,210 TRACE [de.bss.dm.kairos.gui.phaselistener.AnyPhaseListener:25] UPDATE_MODEL_VALUES 4 before Phase
10:21:51,228 INFO [stdout] (default task-46) setMarket([email protected])
10:21:51,251 INFO [stdout] (default task-46) setMarket(null)
10:21:51,265 TRACE [de.bss.dm.kairos.gui.phaselistener.AnyPhaseListener:20] UPDATE_MODEL_VALUES 4 after Phase
導致DB堅持錯誤的價值觀,信息丟失。
當我打開第二個p:accordionPanel
-Tab,導致加載數據,一切正常,第二個BeanA
-Object分配了正確的Market
-Object。
HTML時不工作:
<div class="ui-accordion ui-widget ui-helper-reset ui-hidden-container" role="tablist" data-widget="widget_generalForm_instrumentDetailTabs_listingpanel">
<h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-state-active ui-corner-top" role="tab" aria-expanded="true">
headertext loremipsum
</h3>
<div id="generalForm:instrumentDetailTabs:listingpanel:0:listingtab" class="ui-accordion-content ui-helper-reset ui-widget-content" role="tabpanel" aria-hidden="false">
<div>loaded CONTENT
</div>
</div>
<h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-corner-top" role="tab" aria-expanded="false">
headertext loremipsum
</h3>
<div id="generalForm:instrumentDetailTabs:listingpanel:1:listingtab" class="ui-accordion-content ui-helper-reset ui-widget-content ui-helper-hidden" role="tabpanel" aria-hidden="true">
</div>
<input type="hidden" id="generalForm:instrumentDetailTabs:listingpanel_active" name="generalForm:instrumentDetailTabs:listingpanel_active" value="0">
</div>
點擊第二個選項卡(或有dynamic="false"
)
<div class="ui-accordion ui-widget ui-helper-reset ui-hidden-container" role="tablist" data-widget="widget_generalForm_instrumentDetailTabs_listingpanel">
<h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-state-active ui-corner-top" role="tab" aria-expanded="true">
headertext loremipsum
</h3>
<div id="generalForm:instrumentDetailTabs:listingpanel:0:listingtab" class="ui-accordion-content ui-helper-reset ui-widget-content" role="tabpanel" aria-hidden="false">
<div>loaded CONTENT
</div>
</div>
<h3 class="ui-accordion-header ui-helper-reset ui-state-default ui-corner-top" role="tab" aria-expanded="false">
headertext loremipsum
</h3>
<div id="generalForm:instrumentDetailTabs:listingpanel:1:listingtab" class="ui-accordion-content ui-helper-reset ui-widget-content ui-helper-hidden" role="tabpanel" aria-hidden="true">
<div>loaded CONTENT OF TAB 2!!!
</div>
</div>
<input type="hidden" id="generalForm:instrumentDetailTabs:listingpanel_active" name="generalForm:instrumentDetailTabs:listingpanel_active" value="0">
</div>
上p:accordionPanel
設置dynamic="false"
後也導致正確的行爲,雖然我不能用它。 accordionPanels包含很多組件,當controller.selectedObject.list包含約15個項目時,導致頁面大小> 1MB。
我應該如何處理這個問題?爲什麼我的值更新,雖然他們沒有呈現/加載?
版本信息:Primefaces 5.0,WildFly 8.1.0.Final
我正在使用Primefaces 5。0,將此信息添加到初始帖子。 'dynamic =「false」'不是一個選項,HTML咆哮太大了。 setter中的空檢查將導致無法清空該值。可惜這是必要的.. – Ishkafel 2014-09-05 09:25:37