2015-11-05 41 views
2

我正在使用当前最新的ExtLibs和带有FP3的Domino 9.0.1服务器。重复转发器时遇到寻呼机问题

我想设置我自己的多级别分类视图与从SQLite数据库中获取数据的重复控件,并且我正在与分页控件打成一片。

结构

  1. 我有在时间(段)显示5个类别的主重复控制。这连接到主要寻呼机。
  2. 在这个重复控制中,我有一个对实际数据有另一个重复控制的面板。 (在某些情况下,我把另一部分与另一中继创建多个级别...)

*问题

当我有一次转发多个页面,并在我一页开始了,然后在一个嵌入式寻呼机中,选择第2页,然后在主寻呼机上选择一个不同的页面,然后所有嵌入式寻呼机都自动重置为第2页。在我看来,好像控制嵌入式寻呼机号码的请求范围变量在所有重复的实例中共享。

解决此问题的最佳方法是什么?我是否通过重复中继器吠叫错误的树?

*******************************************独立XPage用于再现

<?xml version="1.0" encoding="UTF-8"?> 
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:pager layout="Previous Group Next" partialRefresh="true" 
     id="pager1" for="repeat1" panelPosition="left"> 
    </xp:pager> 

    <xp:br></xp:br> 
    <xp:br></xp:br> 
    <xp:repeat id="repeat1" rows="5" var="primaryList"> 
     <xp:this.value><![CDATA[#{javascript:var list:java.util.ArrayList = new java.util.ArrayList(); 
list.add("1") 
list.add("2") 
list.add("3") 
list.add("4") 
list.add("5") 
list.add("6") 
list.add("7") 
list.add("8") 
list.add("9") 
list.add("10") 
list.add("11") 
list.add("12") 
list.add("13") 
list.add("14") 
list.add("15") 
list.add("16") 
list.add("17") 
list.add("18") 
return list;}]]></xp:this.value> 
     <xp:section id="section1" header="#{javascript:primaryList}"> 
      <xp:br></xp:br> 
      <xp:panel style="padding:0px 0px 5px 40px"> 
       <xp:pager layout="Previous Group Next" 
        partialRefresh="true" id="pager2" for="repeat2" 
        panelPosition="left"> 
       </xp:pager> 
       <xp:br></xp:br> 
       <xp:br></xp:br> 
       <xp:repeat id="repeat2" rows="5" var="innerRepeat"> 
        <xp:this.value><![CDATA[#{javascript:var list:java.util.ArrayList = new java.util.ArrayList(); 
list.add("1") 
list.add("2") 
list.add("3") 
list.add("4") 
list.add("5") 
list.add("6") 
list.add("7") 
list.add("8") 
list.add("9") 
list.add("10") 
list.add("11") 
list.add("12") 
list.add("13") 
list.add("14") 
list.add("15") 
list.add("16") 
list.add("17") 
list.add("18") 
return list;}]]></xp:this.value> 
        <xp:inputText id="inputText1" 
         value="#{javascript:innerRepeat.toString();}"> 
        </xp:inputText> 
        <xp:br></xp:br> 
       </xp:repeat> 
      </xp:panel></xp:section> 
    </xp:repeat> 
</xp:view> 

重现步骤

  1. 是一个页面上主寻呼机上。
    以任何子寻呼机
  2. ,选择页2.
  3. 其他寻呼机
  4. 切换主寻呼机页3
  5. 通知的通知正确性页2
+0

请张贴您的代码! –

回答

0

上所有子寻呼机我不认为这是一个错误。它的工作原理(!)...

问题是,重复不会为每个迭代内部创建多个寻呼机。所以基本上只有一个寻呼机,该寻呼机只保留一个PagerState。这就是他们表现怪异的原因。

当您使用repeatControls="true"选项时,repeat不会只迭代一个组件,而是会为每次迭代真正创建多个组件。但是,在这种情况下,您不能使用Pager组件进行这样的重复,因为新的重复组件不再有迭代器。它将无法找到'分页',并会抛出'零分区'错误。

在这里,我已经解释了区别重复成分的两种模式之间(从幻灯片#36):

https://speakerdeck.com/sbasegmez/engage-2015-10-mistakes-you-and-every-xpages-developer-make-yes-i-said-you?slide=36

解决办法是创建自己的寻呼机设计内重复。

更新:

另一种方法是标记外,重复如repeatControls="true"并除去外寻呼机。在这样的配置中,组件树中会有多个分页器组件,但是必须牺牲外部分页器。在此配置中,您需要加载外部重复中的所有元素(因为它们不能再被主动操作)。

为了模拟寻呼机行为,您可以设计一个自定义寻呼机,并使用内部重复的rendered属性。它会减慢页面,但会为用户提供“分页”感觉。

+0

如果我不确定有多少个主要类别,我如何确保提供所有元素? – Greg

+0

对于外部重复,您无法控制要动态显示多少个页面。一种选择;您可以使用查询参数并在每次切换页面时重新加载页面(例如'page.xsp?from = 1&count = 5')。您实际上会模仿寻呼机组件,但每次都切换到新页面。 –

+0

这样,基本上你会初始显示前五个。如果您有五个以上的类别,您可能会显示一个导航到下一组类别的“下一步”链接(如寻呼机)。关键是,您需要重新加载页面以查看接下来的五个类别。另一方面,寻呼机使用视图范围机制来跟踪你的位置。 'repeatControls =“true”'不允许组件列表中的运行时更改。 –