今天讓我發瘋,所以我需要弄清楚我是否做錯了什麼,或者根本誤解了它的工作原理。重複標記緩存?
我有像這樣有兩個標籤計算自定義控件從同支持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的接口,以及如何解決這個問題,或者如果我有某種實現問題,我找不到。
情節變厚:我添加了重複控制的尋呼機控制,似乎解決了這個問題。爲了做到這一點,我刪除了'repeatControls = true'並設置了'rows = 30'。這些設置是爲了讓整個報告出現在單個頁面上,因此這不是理想的解決方案。我會進一步調查... – 2014-09-29 20:55:35
你的bean的範圍是什麼?順便說一句,你可以通過將重複的「alwaysComputeLast」屬性設置爲「true」來完全計算尋呼機控制。 – 2014-09-29 21:46:44