2014-09-29 95 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