清除重复控制

时间:2019-06-11 23:13:47

标签: xpages

我有一个自定义搜索,用户在其中输入序列号,然后从Notes数据库中返回与重复控件中的该S / N有关的文档。允许他们根据不同的S / N进行另一次搜索,但是,如果用户从良好的S / N获得结果后输入了错误的序列号,则onClick代码会出错,并且重复控件会从良好的S / N中显示文档。 N.当用户开始新的搜索时,是否可以擦除重复控件中的条目。

XPage上有两个按钮。第一个命名为“搜索”,当单击它时,将进行一些解析(这将导致错误的S / N错误),并激活Java bean搜索代码以返回结果。然后隐藏“搜索”按钮,并显示另一个名为“新搜索”的按钮,单击该按钮会删除用户为第一次搜索输入的数据,并允许他们输入新的S / N。

我已经搜索了这个论坛和其他论坛,但没有找到答案。我已经将重复控件属性RemoveRepeat设置为true,并且还将repeatControls设置为false。

搜索按钮的代码

importPackage(com.ourComp)
dBar.warn("pssrl1 = " + getComponent("pssrl1").getValue().toUpperCase());
if(getComponent("pssrl1").getValue().toUpperCase()!=""){
try{
    var serialNbr = getComponent("pssrl1").getValue().toUpperCase();
    varr mhpItem = getDataBean.getModelNbrData(serialNbr.toUpperCase(),"americas", sessionScope.SNtable);
    sessionScope.serialNbr = serialNbr;
//it errors out below on bad S/N
    var sg= utilBean.getLeftDataInfo(searchMHP);
    var newSearchMHP = utilBean.getRightDataInfo(searchMHP);
    var funct = utilBean.getLeftDataInfo(newSearchMHP);
    var len = sg.length-1
    var size = sg.slice(0,len)
    var gen = sg.substr(len,1);
    //based on funct > lookup productFamily in another DB
    var otherDBname = configBean.getValue("otherDbPath")
    var otherDB:NotesDatabase = session.getDatabase(session.getServerName(), otherDBname);
    var vwWOther:NotesView = otherDB.getView("ProdFamLU");
    //now that we have connection to other get document based funct
    var docFunct:NotesDocument = vwOther.getDocumentByKey(funct);
    var productFamily=docFunct.getItemValueString("Family");

    returnMapSearch =  searchLiteratureBean.processSearch5(mhpItem,funct,size,gen,sessionScope.LanguageP,productFamily);
} catch(e){
    dBar.error("Error in Search button: " + e.toString());
    sessionScope.showResults = false
    println("ccDataEntry---username " + session.getEffectiveUserName() + "--> Error in Search button: " + e.toString());
}
}
println("++++++++++++++++++++++++++++");

“新搜索”按钮的代码

sessionScope.serialNbr="";
sessionScope.mhpItem="";
getComponent("pssrl1").setValue("");

如何清除重复控件上的现有结果?

重复代码

<xp:panel id="panelSearchResults1" styleClass="row">
        <xp:this.rendered><![CDATA[#{javascript:sessionScope.showResults != false}]]></xp:this.rendered>
<xp:repeat id="repeat1"
    rows="${searchLiteratureBean.maxResultsPerPage}"
    value="#{javascript:if(showWidget==true) {return searchLiteratureBean.getSearchResults();}}"
    var="col" indexVar="ind">
    <tr>
        <td>
            <xp:image
                url="#{col.iconURL}" id="image2" alt="#{col.mediaType}"
                style="padding-top:3px;">
            </xp:image>
            <xe:tooltip
                id="tooltip1" for="image1" label="#{col.mediaType}">
            </xe:tooltip>
        </td>
        <td>
            <xp:link escape="true" text="#{col.subject}" id="link2" value="#{col.url}">
                <xp:this.target><![CDATA[#{javascript:return (col.isHomeDoc()? "" : "_blank");}]]></xp:this.target>
            </xp:link>
        </td>
        <td>
            <xp:text escape="true" id="computedField6" value="#{col.productFamily}"> </xp:text>
        </td>
        <td>
            <xp:text escape="true" id="computedField2" value="#{col.language}"> </xp:text>
        </td>
        <td>
            <xp:text escape="true" id="computedField3" value="#{col.lastModified}"> 
                <xp:this.converter>
                    <xp:convertDateTime type="date"> </xp:convertDateTime>
                </xp:this.converter>
            </xp:text>
        </td>
    </tr>
</xp:repeat>
</xp:panel>

1 个答案:

答案 0 :(得分:0)

您应该进行一些改进/

  • pssrl1绑定到范围变量。您无需读/写作用域变量,而无需执行控件。也可以是托管bean
  • 添加代码以清除searchLiteratureBean。如果该集合不返回成员,则不会重复。

最有效的方法是将get / setSearchString方法添加到searchLiteratureBean。将您的搜索字段绑定到该字段。有search()和clear()方法,最后还有一个isSearched()属性,可用于视图/隐藏。

由于已安装了Bean,因此标记应仅包含数据绑定。有道理吗?