onChange事件的部分更新没有得到正确的值

时间:2013-04-02 13:58:32

标签: xpages onchange

我在xpage中构建了一个搜索功能,用户可以从列表框和组合框中选择值,ftsearch查询由这些值组成。因此,当我更改组合框的值时,会触发onChange事件并发生对结果视图的部分更新。问题是视图根据onChange之前的组合框的先前值显示结果。这就像视图中的结果总是一个变化。

我在事件中添加了try / catch,但没有发生异常。这似乎是一种非常奇怪的行为。以前有没有人经历过这样的事情?

我很感激任何想法和方向,因为我现在被问到可能出现的问题。

提前多多感谢!

1 个答案:

答案 0 :(得分:2)

我只是以一种非常简单的方式给了它一个镜头,它对我有用。这就是我所拥有的:

  1. 确保我的数据库已被索引!!
  2. 使用id =“viewPanel1”
  3. 创建一个viewPanel
  4. 将viewPanel链接到视图数据源
  5. 使用以下代码为viewPanel创建计算搜索属性:

    requestScope.get( “FTS”);

  6. 在视图面板上创建一个comboBox(上图)

  7. 将组合绑定到我的requestScope变量“fts”
  8. 使用适当的值填充组合的选项列表
  9. 让combo的onchange事件执行部分更新并将其链接到我的viewPanel(ID:viewPanel1)
  10. 在我的情况下,我在视图中有一个测试文档,主题字段的值为“sub 1”,“sub 2”,...,“sub 6”。所以我让我的组合为我提供选项“1”......“6”。

    如果我想更具体地使用我的ft搜索字符串,我可以在viewPanel的搜索属性中构建它(步骤4):

    if(requestScope.containsKey("fts") && requestScope.get("fts")!=""){
        "Sub " + requestScope.get("fts");
    }
    

    就是这样 - 有效。

    如果我的问题出错,请告诉我们。在这种情况下,您需要更具体地了解您到目前为止要做的事情以及您尝试过的事情。

    修改
    在你的评论后,我在我的组合中添加了一个listBox。我看到listBox本身并没有做任何坏事,但我当然要注意两者不要互相攻击。所以这就是我要解决的问题:

    1. 将我的comboBox绑定到另一个名为“ ftsCombo ”的requestScope var
    2. 将我的listBox绑定到“ ftsList
    3. 两个控件都有相同的选项列表(见上文;当然你可以使用不同的选项,我只是懒得想到不同的值...),并且他们正在执行部分更新onchange
    4. 能够控制结果我在viewPanel(id =“ tgtPanel ”)周围创建了一个命名面板,并将部分更新规则更改为目标面板
    5. 在视图上方的面板内我创建了2个计算字段,每个字段都绑定到我的一个requestScope变量( ftsCombo / ftsList ),这样我就能看到范围内的内容触发onchange后
    6. 在两个onchange事件中我还写了一小段SSJS代码 明确“另一个”变量,以便两者不相互接触 方式:
    7. (改变组合:)

      requestScope.remove("ftsList");  
      

      (onchange of list :)

      requestScope.remove("ftsCombo"); 
      

      最终将视图的计算搜索属性更改为:

      if(requestScope.containsKey("ftsCombo") && requestScope.get("ftsCombo")!=""){
      return "Sub " + requestScope.get("ftsCombo");
      }
      if(requestScope.containsKey("ftsList") && requestScope.get("ftsList")!=""){
       return "Sub " + requestScope.get("ftsList");
      }
      

      所以现在我可以使用组合列表来应用过滤器