環境:
PrimeFaces 6.1
JSF 2.2
的Tomcat 7.0.23
的Java 1.7.0_79PrimeFaces treetable中 - 停止複選框選擇傳播
實現使用複選框選擇一個treetable中,並需要防止的選擇爲父節點和子節點分別進行客戶端和服務器端處理的上下傳播。
例樹:
父節點
--Child節點1
----兒童子節點1.1
--Child節點2
----兒童子節點2.1
希望的行爲:
當選擇一個節點時,只應選擇該節點的複選框。
實際行爲(開箱即用):
選擇一個節點,子和父節點被選擇。例如,在上面的示例樹中選擇「父節點和子子節點2.1」中的「子節點2」也被選中。
treetable中組分:
<p:treeTable id="treeTable" value="#{Bean.rootNode}" var="item" selectionMode="checkbox" nodeVar="node"
styleClass="widthFull" showUnselectableCheckbox="true" selection="#{Bean.selectedNodes}" stickyHeader="true">
<p:ajax event="select" listener="#{Bean.processSelect(item)}" ignoreAutoUpdate="true"/>
<p:ajax event="unselect" listener="#{Bean.processUnselect(item)}" ignoreAutoUpdate="true"/>
....
</p:treeTable>
重寫PrimeFaces JS功能:
能夠防止在客戶機側處理傳播通過重寫PrimeFaces.widget.TreeTable.prototype.propagateUp和PrimeFaces.widget.TreeTable .prototype.getDescendants JavaScript函數。
PrimeFaces.widget.TreeTable.prototype.propagateUp = function(node) {
//do nothing, overriding the TreeTable propagate selection up functionality
}
PrimeFaces.widget.TreeTable.prototype.getDescendants = function(node) {
//do nothing other than return empty array, overriding the TreeTable propagate selection down functionality by overriding getDescendants...hopefully this doesn't cause other issues
f = [];
return f;
}
treetable中更新:
的treetable中更新被作爲Ajax選擇和取消選擇事件處理的一部分而執行。
RequestContext.getCurrentInstance().update("inventoryForm:treeTable");
問:
當阿賈克斯選擇和取消選擇事件,以禁用特定節點上可選擇和更新treetable中被解僱,子節點(或多個)越來越選中。處理ajax事件偵聽器時,子節點不在Bean的selectedNodes數組中。如何防止在TreeTable組件更新時選擇子節點?
檢查treetable中(渲染)java代碼做什麼......也許是視覺上選擇其中有 – Kukeltje
@Kukeltje感謝您的建議,我會看看那兒。 – CapnHook
@Kukeltje再次感謝您的建議,它幫助您找到了解決方案。我能夠通過擴展CheckboxTreeNode類並重寫propagateSelectionDown和propagateSelectionUp方法來完成複選框傳播預防。 – CapnHook