2014-09-29 96 views
0

今天讓我發瘋,所以我需要弄清楚我是否做錯了什麼,或者根本誤解了它的工作原理。重複標記緩存?

我有像這樣有兩個標籤計算自定義控件從同支持bean:

<xp:text 
     id="test1" 
     value="#{claimsFiledReport.rows}"> 
    </xp:text> 
    <xp:repeat 
     id="repeatDataRows" 
     value="#{claimsFiledReport.rows}" 
     var="row" 
     repeatControls="true"> 

     <... stuff here ...> 

    </xp:repeat> 

的支持bean是像這樣把該信息提供:

public List<List<String>> getRows() { 
    System.out.println("running getRows()"); 
    List<List<String>> list = new ArrayList<List<String>>(); 
    for (ReportLine line : getLines().values()) { 
     List<String> lineData = new ArrayList<String>(); 
     lineData.addAll(line.getValueStringList()); 
     list.add(lineData); 
    } 
    return list; 
} 

現在的一部分,我不明白:

當我第一次加載頁面,控制檯打印running getRows()兩次,並在瀏覽器中一切都是空的,因爲報告還沒有運行。然後我有一個運行報表的按鈕,並刷新包含這兩個控件的表格。當發生這種情況時,running getRows()只打印一次,只有文本控件顯示數據。重複控制保持空白。所以唯一有意義的是重複控制緩存getRows()的結果,但這不是我期望的行爲。

另外,如果我把runReport()作爲getRows()的第一行,那麼我的表中填充了默認數據,如果我嘗試更改我的過濾器並重新運行報表,表格將保持不變,而計算的文本會更新。

所以我的問題是,我是否誤解了重複控制與支持bean的接口,以及如何解決這個問題,或者如果我有某種實現問題,我找不到。

+0

情節變厚:我添加了重複控制的尋呼機控制,似乎解決了這個問題。爲了做到這一點,我刪除了'repeatControls = true'並設置了'rows = 30'。這些設置是爲了讓整個報告出現在單個頁面上,因此這不是理想的解決方案。我會進一步調查... – 2014-09-29 20:55:35

+0

你的bean的範圍是什麼?順便說一句,你可以通過將重複的「alwaysComputeLast」屬性設置爲「true」來完全計算尋呼機控制。 – 2014-09-29 21:46:44

回答

1

repeatControls="true"意思是「獲取頁面加載時的重複內容,並且從未在此之後」。所以重複的內容是他們第一次加載頁面的內容。在你的第一個例子中,runReport()沒有數據,所以重複是空白的。在第二個示例中,設置了runReport(),因此報告爲空。但repeatControls爲true意味着它爲runReport()的每個元素創建了一組控件並存儲這些控件。

雖然計算字段控件會顯示最新信息,因爲它的值是動態的。

想象一下,在面板上設置loaded="#{viewScope.myVal==true}"並嘗試使用局部刷新通過設置viewScope.myVal=true來顯示該面板。同樣,你可以在頁面加載時獲得所需的內容。

基本上,如果你想改變重複的內容(包括使用尋呼機),你不能使用repeatControl="true"

設置repeatControls和對重複值使用頁面加載綁定($ {...})之間的區別在於通過執行頁面加載綁定,您仍然可以使用尋呼機。用例是如果你想在組件樹中構建重複控件的內容,但是然後從組件樹中刪除重複。

getRows()將在頁面加載時運行兩次,因爲它是從兩個組件調用的,這很好。

+0

謝謝Paul。我一直試圖讓整個報告出現在單個頁面上,而不必擔心有多少行,並且按照行的幫助文本,似乎我需要按順序設置「repeatControls =」false「」讓這個工作。這讓我走錯了路。再次感謝。 – 2014-09-30 11:58:57

+1

一個選項可能是將行屬性綁定到bean中的另一個屬性。然後在runReport()方法中設置它。 – 2014-09-30 12:12:27