XPages视图 - 同时过滤和搜索

时间:2014-04-17 09:58:21

标签: full-text-search xpages lotus-notes notesview

Hello Domino程序员!

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

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

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

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

好的,这是我如何解决这个问题。我只使用普通的旧视图数据源使用数据视图。

我想要一个搜索框,如果您只是在字段中键入内容,则使用" startKeys"属性导航到正确的条目。搜索字段有一个onFocus事件,它设置一个布尔值" viewMoveTo"为真。您可以将此值存储在bean或sessionScope中,也可以存储在任何地方,并不重要。还有另一个事件onKeyUp,它只是部分刷新数据视图。

如果您点击搜索按钮,它将使用"搜索"进行FT搜索。数据视图中的属性。在搜索按钮的onClick事件中,我设置了" viewMoveTo"价值为假。

这是我在该领域的代码:

        <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>

所以,重复一遍......用户将光标放在搜索栏中,并且&#34; viewMoveTo&#34;变量通过onFocus事件设置为true。 &#34; startKeys&#34;数据源的属性检查是否&#34; viewMoveTo&#34;如果不是,则返回搜索字段的值作为要移动的键。如果viewMoveTo值为false,则返回null值。在onKeyUp事件中,我们部分刷新数据视图。

搜索按钮正好相反。它设置&#34; viewMoveTo&#34;的值。为假。 &#34;搜索&#34;数据源的属性检查是否&#34; viewMoveTo&#34;是的,如果不是,那么它会将搜索字段的值作为要搜索的值返回。如果viewMoveTo值为true,则返回null值。最后,onclick事件会对数据视图进行部分刷新。