Xpages 过滤ViewPanel控件

Xpages 过滤ViewPanel控件,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我有一个viewPanel控件,并在视图上方添加了一个编辑框和一个“应用过滤器”按钮。如果用户输入了什么,我想根据输入的内容过滤视图。假设编辑框将用于过滤视图的“CompanyName”列。我的按钮在SSJS下的“onclick”事件中有以下代码 var viewPanel1:com.ibm.xsp.component.xp.XspViewPanel = getComponent("viewPanel1"); var domView:com.ibm.xsp.model.domino.Domino

我有一个viewPanel控件,并在视图上方添加了一个编辑框和一个“应用过滤器”按钮。如果用户输入了什么,我想根据输入的内容过滤视图。假设编辑框将用于过滤视图的“CompanyName”列。我的按钮在SSJS下的“onclick”事件中有以下代码

var viewPanel1:com.ibm.xsp.component.xp.XspViewPanel = getComponent("viewPanel1");
var domView:com.ibm.xsp.model.domino.DominoViewData = viewPanel1.getData();
var filtervalue = getComponent('cmbCompanyName').getValue();
domView.setKeys(filtervalue);
我不明白设置键怎么知道我只是通过传递用户输入的内容来过滤“CompanyName”列。上面的代码不会产生错误,只是不会产生所需的结果。如果我能在视图中看到“我的公司”。我在编辑框中输入“我的公司”,然后单击“应用过滤器”按钮,此时视图完全为空


感谢您的帮助。

如果您将过滤器编辑框值绑定到视图范围变量并将此视图范围变量用作dominoView的
属性,则无需对SSJS进行编码,您将获得更简单的解决方案

您只需部分刷新viewPanel1,单击按钮“应用过滤器”,无需任何其他代码


...
属性过滤器始终是视图中第一个排序的列。因此,在您的例子中,CompanyName列必须是第一个排序的列

如果
keys
属性包含数组,则第一个元素过滤第一个排序列,第二个元素子过滤第二个排序列,依此类推

如果您有多个过滤器可用于不同的排序列,则可以将“第一个”排序列“切换”到另一个具有dominoView属性的排序列

sortColumn="otherColumnName"

“otherColumnName”可以使用SSJS计算,具体取决于单击的按钮或填充的过滤器编辑字段。

我犯了很多次的一个简单错误:视图的第一列是否已排序?不,没有!我尝试了viewScope的方法,效果非常好。我要做一些实验,让它与排序键一起工作。似乎如果我有多种分类,那可能是最好的选择。谢谢你的帮助,太好了!我在回答中添加了一个描述,说明如何在排序列之间切换以进行键筛选。