1

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

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

我会很感激任何想法和方向,因为我现在对问题可能是什么感到困惑。

提前非常感谢!

4

1 回答 1

2

我只是以一种非常简单的方式试了一下,它对我有用。这是我所拥有的:

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

    requestScope.get("fts");

  5. 创建一个组合框(上图)视图面板

  6. 将组合绑定到我的 requestScope 变量“fts”
  7. 用适当的值填充组合的选项列表
  8. 让组合的 onchange 事件执行部分更新并将其链接到我的 viewPanel(ID:viewPanel1)

在我的情况下,我的视图中有一个测试文档,其主题字段具有“sub 1”、“sub 2”、...、“sub 6”等值。所以我让我的组合为我提供选项“1”...“6”。

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

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

就是这样 - 工作。

如果我把你的问题弄错了,请告诉我们。在这种情况下,您需要更具体地说明您正在尝试做什么以及到目前为止您尝试了什么。

编辑:
根据您的评论,我在我的组合中添加了一个列表框。我看到 listBox 本身并没有做任何坏事,但我当然必须注意不要让两者互相干扰。所以这就是我为解决这个问题所做的事情:

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

(组合变化:)

requestScope.remove("ftsList");  

(列表更改:)

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");
}

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

于 2013-04-02T15:36:26.107 回答