今天让我发疯,所以我需要弄清楚我是否做错了什么,或者根本误解了它的工作原理。重复标记缓存?
我有像这样有两个标签计算自定义控件从同支持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