2014-08-29 70 views
0

我正在處理一個Xpages應用程序,我在其中有一個視圖控件。 我試圖在列標題中放入一個複選框來選擇視圖中的所有複選框。 問題是,當我從視圖中轉到另一個頁面時,其行不會被選中,並且僅在可見頁面上進行選擇。 因此,我希望能夠選擇視圖所有頁面中的所有行,而不會在從一個頁面切換到另一個視圖時消失。全選複選框lotus xpages

+0

我不確定這是否可能與傳統的視圖控制。您可以通過重複控制來完成此操作,每個複選框都保存一個值。 – 2014-08-29 15:18:39

+0

也可以看看這個靈感:http://hasselba.ch/blog/?p=1062 – 2014-08-30 11:29:04

+2

正如你從答案和其他評論中可以看到的,這不是一個非常簡單的任務。然而,我的主要問題是你想對所有選定的條目做什麼?大多數情況下,還有其他方法可以實現目標。換句話說:來自Notes客戶端開發並轉向Xpages,我們自然傾向於尋找類似我們一直使用的解決方案。往往不是最好的 – 2014-08-30 16:22:44

回答

1

有幾個問題的意見和選擇。

首先,在頁面之間移動的分頁器操作不會處理'選擇所有行'數據,因爲它可以默認使用部分執行。如果您將partialExecute="false"放入您的尋呼機中,您將看到「選擇所有行」複選框將在頁面之間進行維護。

但是,如果在列和columnHeader上有複選框,則該組件在後端維護一個selectedIds數組。不幸的是,這個數組僅包含可見的選擇。因爲該數組由viewPanel組件維護,該組件不知道未顯示的數據條目列表。

此外,複選框實現不提供任何偶數機制,您可以在後端抓取選擇以在頁面之間緩存它們。

要確定選擇所有複選框可以用一個小技巧來實現。假設您正在使用所有默認樣式;

<xp:inputHidden 
    id="inputAllSelected" 
    value="#{viewScope.allSelected}" 
    defaultValue="false"></xp:inputHidden> 
<xp:scriptBlock 
    id="scriptBlock1"> 
    <xp:this.value><![CDATA[ 
function getSelectAllCheckbox() { 
    return dojo.query("input.xspCheckBoxViewColumnHeader")[0]; 
} 

function toggleSelectAll(){ 
    dojo.byId("#{id:inputAllSelected}").value=getSelectAllCheckbox().checked; 
} 

dojo.addOnLoad(function() { 
    dojo.connect(getSelectAllCheckbox(), "onchange", toggleSelectAll); 
}); 
]]></xp:this.value> 
</xp:scriptBlock> 

要緩存頁面之間的複選框,您需要使用自定義列來實現自己的複選框。我建議使用數據表組件來獲得更大的靈活性。