Xpages onChange事件don'的部分更新;无法获得正确的值

Xpages onChange事件don'的部分更新;无法获得正确的值,xpages,onchange,Xpages,Onchange,我在xpage中构建了一个搜索函数,用户可以从列表框和组合框中选择值,ftsearch查询由这些值组成。因此,当我更改组合框的值时,将触发onChange事件,并对结果视图进行部分更新。问题是视图根据onChange之前组合框的上一个值显示结果。就好像视图中的结果总是落后一个变化 我向事件中添加了try/catch,但没有发生异常。这似乎是一种非常奇怪的行为。以前有人经历过类似的事情吗 我会很感激任何想法和方向,因为我现在被困在问题可能是什么 提前多谢 我只是用一种非常简单的方式尝试了一下,它对

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

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

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


提前多谢

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

  • 确保我的数据库已建立ft索引
  • 创建id为=“viewPanel1”的viewPanel
  • 将viewPanel链接到视图数据源
  • 使用以下代码为我的viewPanel创建计算搜索属性:

    requestScope.get(“fts”)

  • 在视图面板上方创建一个组合框

  • 将组合绑定到我的requestScope变量“fts”
  • 用适当的值填充组合的选项列表
  • 让组合的onchange事件执行部分更新,并将其链接到我的viewPanel(ID:viewPanel1)
  • 在我的例子中,我的视图中有一个主题字段,该字段的值为“sub 1”、“sub 2”,“第6分段”。所以我让我的组合为我提供选项“1”。。。“6”

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

    就是这样,行得通

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

    编辑:
    在你的评论之后,我在我的组合中添加了一个列表框。我看到listBox本身并没有做什么坏事,但我当然要注意,这两个东西不会互相妨碍。下面是我为解决这个问题所做的:

  • 将我的comboBox绑定到另一个名为“ftsCombo”的requestScope变量
  • 将我的列表框相应地绑定到“ftsList”
  • 两个控件都有相同的选项列表(请参见上文;当然,您可以使用不同的选项,我只是懒得考虑不同的值…),它们在更改时执行部分更新
  • 为了能够控制结果,我在viewPanel(id=“tgtPanel”)周围创建了一个命名的面板,并更改了部分更新规则以针对该面板
  • 在视图上方的面板中,我创建了两个计算字段,每个字段都绑定到我的一个requestScope变量(ftsCombo/ftsList),以便在触发onchange后查看范围中的内容
  • 在这两个onchange事件中,我还向 清除“另一个”变量,这样这两个变量就不会相互影响 方式:
  • (组合的一次更改:)

    (列表一经更改:)

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

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

    因此,现在我可以使用组合或列表来应用过滤器

    您是否可以创建一个示例XPage并发布代码。要详细了解Simon的注释:如何将ftsearch字符串传递到视图的搜索属性中?您使用的是视图面板吗?是的,我使用的是视图面板,我将ftsearch字符串传递给它的search属性。ftsearch字符串由从列表框和组合框中获取值组成@SimonO'Doherty恐怕代码很复杂,很容易从这里读取。不需要完整的代码。尝试在空白nsf中创建一个示例,看看会发生什么。这是在将提交的值应用于模型之前使用存储值时的常见问题。JSF生命周期中的更多信息。您可以尝试获取“提交的值”而不是“值”。或者改变你的搜索方式,看起来你的搜索顺序不对。谢谢你的时间和帮助!我用一个列表框、一个组合框和一个视图创建了一个新的xpage。我的问题似乎发生在有列表框的时候,而不仅仅是组合框。我认为问题与@Frantisek Kossuth在上述评论中所说的有关。因为当我将列表框添加到xpage时,我似乎总是在onChange事件之前获得值。再次感谢!我试试看。目前我没有使用示波器。例如,我使用combo1.getValue()获取值。也许这就是问题所在。好吧,我想这就是原因。用望远镜给它一次机会顺便说一句:我把两个字段控件都放在更新的面板之外;但是,如果你把它放在里面,你很可能甚至不需要像我那样删除变量(我编辑的版本中的步骤6);我想这两种方法都有各自的优点。我试过你的方法,直到现在它都能奏效,我第一种方法遇到的问题不再出现。非常感谢你!似乎使用示波器更好。
    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");
    }