You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAP UI5中sap.m.Table过滤时发送两次OData请求问题咨询

SAP.m.Table搜索时触发两次OData请求的问题

我有一个绑定到实体集的sap.m.Table,搭配了SearchField,触发搜索时会对绑定数据执行过滤并返回结果,功能正常,但会发送两次带有不同分页参数的OData请求,不清楚原因。相关代码及请求详情如下:

XML视图

<Table id="tabJobs" items="{/JobSet}" beforeOpenContextMenu="onBeforeOpenContextMenu" alternateRowColors="true" busy="{config>/busy}" busyIndicatorDelay="0" sticky="HeaderToolbar,ColumnHeaders">
    <headerToolbar>
        <Toolbar>
            <SearchField id="sfHeader" width="20%" placeholder="Search..." search=".onSearchJobs" showRefreshButton="true" value="{config>/searchField}"/>
        </Toolbar>
    </headerToolbar>
    ...
 </Table>

控制器代码

onSearchJobs: function(oEvent) {
  var oFilter = [];
            
  oFilter.push(new Filter("SearchField", FilterOperator.EQ, oEvent.getSource().getValue()));
            
  this.byId("tabJobs").getBinding("items").filter(oFilter);
}

Manifest配置

"": {
    "dataSource": "projects",
    "preload": false,
    "settings": {
        "defaultCountMode": "Inline",
        "defaultBindingMode": "TwoWay",
        "refreshAfterChange": true,
        "defaultUpdateMethod": "MERGE",
        "useBatch": true,
        "defaultOperationMode": "Server"
    }
},

OData请求详情

1st one: GET JobSet?$skip=0&$top=100&$filter=SearchField eq 'test'&$inlinecount=allpages
2nd one: GET JobSet?$skip=2&$top=98&$filter=SearchField eq 'test'&$inlinecount=allpages

问题分析与解决方案

原因分析

  1. Table粘性设置触发分页调整:你给Table配置了sticky="HeaderToolbar,ColumnHeaders",框架会先按初始分页参数请求数据,随后根据粘性头部的高度重新计算可视区域所需数据量,进而调整$skip和$top参数发起第二次请求。
  2. 绑定自动刷新机制:Manifest中refreshAfterChange: true的配置,会在绑定状态变更(比如执行过滤)时自动触发绑定刷新,导致额外请求。
  3. SearchField双向绑定的连锁反应:SearchField的value采用双向绑定{config>/searchField},搜索触发时,一方面执行过滤逻辑,另一方面双向绑定会更新模型,模型变更又可能触发绑定的二次更新。

解决方案

  • 显式指定绑定分页参数:在Table的items绑定中直接固定$top参数,避免框架自动调整分页:
    <Table id="tabJobs" items="{
      path: '/JobSet',
      parameters: {
        $top: 100
      }
    }" ...>
    
  • 关闭不必要的自动刷新:将Manifest中的refreshAfterChange改为false,或者在过滤时传入第二个参数阻止自动刷新:
    this.byId("tabJobs").getBinding("items").filter(oFilter, true);
    
  • 优化SearchField绑定方式:如果不需要实时同步搜索框值到模型,将绑定改为单向:
    <SearchField ... value="{= ${config>/searchField} }"/>
    
  • 排查额外事件绑定:检查Table的updateFinished等事件是否存在额外的绑定操作,避免触发二次请求。

内容的提问来源于stack exchange,提问作者Fishrage_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:12:05