【问题标题】:Filtering a ViewPanel Control过滤 ViewPanel 控件
【发布时间】:2014-08-01 20:33:06
【问题描述】:

我有一个 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);

我不明白 setKeys 是如何通过我传递用户输入的内容来知道我在“CompanyName”列上进行过滤的。上面的代码不会产生错误,只是不会产生预期的结果。如果我可以在视图中看到“我的公司”。我在编辑框中输入“我的公司”,然后单击“应用过滤器”按钮,然后视图完全空白。

任何帮助表示赞赏。

【问题讨论】:

  • 一个简单的错误我犯了很多次:视图的第一列是排序的吗??

标签: xpages xpages-ssjs


【解决方案1】:

如果您将过滤器编辑框值绑定到 视图范围变量 并将此视图范围变量用作 dominoView 的 keys 属性,您将获得一个更简单的解决方案,而无需编写 SSJS。

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

<xp:this.data>
    <xp:dominoView
        var="view1"
        viewName="viewCompanies"
        keys="#{viewScope.cmbCompanyName}">
    </xp:dominoView>
</xp:this.data>
<xp:inputText
    id="inputText1"
    value="#{viewScope.cmbCompanyName}"></xp:inputText>
<xp:button
    value="Filter"
    id="button1">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="partial"
        refreshId="viewPanel1">
    </xp:eventHandler>
</xp:button>
<xp:viewPanel
    value="#{view1}"
    id="viewPanel1">
    ...
</xp:viewPanel>

keys 属性过滤器总是在视图中排好序的列。因此,在您的情况下,CompanyName 列必须是第一个排序的列。

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

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

sortColumn="otherColumnName"

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

【讨论】:

  • 不,不是!我尝试了 viewScope 的方式,它就像一个魅力。不过,我将做一些试验,让它与排序的键一起工作。好像我有多种可能是要走的路。感谢您的帮助。
  • 太棒了!我在我的答案中添加了描述如何在排序列之间切换以进行键过滤。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多