1

你好 Domino 程序员!

我在使用 Xpages 应用程序时遇到了以下问题:

我有许多按用户名过滤的 Xpages 视图控件。最近我不得不向现有视图添加完整搜索。选项“在视图结果中搜索”似乎覆盖了“按列值过滤”选项,因此我可以清楚地看到其他用户文档。

我可以考虑在查询中添加一个附加条件以过滤搜索结果,但这是唯一的方法吗?

任何帮助将不胜感激。

4

1 回答 1

1

好的,这就是我处理这个问题的方法。我将数据视图与普通的旧视图数据源一起使用。

我想要一个搜索框,如果您只是在字段中输入一些内容,它会使用“startKeys”属性导航到正确的条目。搜索字段有一个 onFocus 事件,它将布尔值“viewMoveTo”设置为 true。您可以将此值存储在 bean 或 sessionScope 或任何地方,没关系。还有另一个事件 onKeyUp 只是对数据视图进行了部分刷新。

如果您单击搜索按钮,它将使用数据视图中的“搜索”属性进行 FT 搜索。在搜索按钮的 onClick 事件中,我将“viewMoveTo”值设置为 false。

这是我的字段代码:

        <xp:inputText
            id="viewSearchField1"
            value="#{UserProfile.viewSearchStr}"
            styleClass="form-control rpdViewSearchField">
            <xp:this.attrs>
                <xp:attr name="placeHolder" value="Search"></xp:attr>
            </xp:this.attrs>
            <xp:eventHandler
                event="onfocus"
                submit="true"
                refreshMode="norefresh"
                            action="#{javascript:UserProfile.setViewMoveTo(true);}">
            </xp:eventHandler>
            <xp:eventHandler
                event="onkeyup"
                submit="true"
                refreshMode="partial" 
                refreshId="dataView1">
            </xp:eventHandler>
        </xp:inputText>

这是搜索按钮的代码:

<xp:link id="link2" title="Perform Search">
    <xp:eventHandler
        event="onclick"
        submit="true"
        refreshMode="partial"
        refreshId="dataView1"
        action="#{javascript:UserProfile.setViewMoveTo(false);}">
    </xp:eventHandler>
    <i class="fa fa-search" />
</xp:link>

最后是数据视图的数据源代码:

<xe:this.data>
    <xp:dominoView
        var="currentView"
        expandLevel="1"
        viewName="#{javascript:return PortalContext.getCollection() != null ? PortalContext.getCollection().getViewName() : null;}"
        databaseName="#{javascript:return DesktopContext.getCurrentContainer().getFilePath();}">
        <xp:this.startKeys><![CDATA[#{javascript:var returnVal = UserProfile.getViewSearchStr();
if (!UserProfile.getViewFTSearch()) {
    returnVal = null;
}
return returnVal;}]]></xp:this.startKeys>
        <xp:this.search><![CDATA[#{javascript:var returnVal = UserProfile.getViewSearchStr();
if (UserProfile.getViewFTSearch()) {
    returnVal = null;
}
return returnVal;}]]></xp:this.search>
    </xp:dominoView>
</xe:this.data>

所以,复习一下……用户将光标放在搜索字段中,并且“viewMoveTo”变量通过 onFocus 事件设置为 true。数据源的“startKeys”属性检查“viewMoveTo”是否为假,如果不是,则返回搜索字段的值作为要移动到的键。如果 viewMoveTo 值为 false,则返回空值。在 onKeyUp 事件中,我们部分刷新数据视图。

搜索按钮正好相反。它将“viewMoveTo”的值设置为 false。数据源的“搜索”属性检查“viewMoveTo”是否为真,如果不是,则返回搜索字段的值作为要搜索的值。如果 viewMoveTo 值为真,则返回空值。最后,onclick 事件对数据视图进行了部分刷新。

于 2014-04-17T16:07:57.387 回答