Очистить контроль повтора - PullRequest
1 голос
/ 12 июня 2019

У меня есть пользовательский поиск, в котором пользователь вводит серийный номер, а документы из базы данных Notes возвращаются в соответствии с этим S / N в элементе управления повторением.Им разрешается выполнять другой поиск на основе другого S / N, однако, если пользователь вводит неверный серийный номер после получения результатов из хорошего S / N, код ошибки onClick выходит из строя, а повторный элемент управления отображает документы из хорошего S / N.Н.Есть ли способ стереть записи в Repeat Control, когда пользователь начинает новый поиск.

На XPage есть две кнопки.Первый называется «Поиск», и при щелчке происходит некоторый анализ (в этом случае происходит ошибка из-за плохого S / N), и активируется код поиска Java-бина для возврата результатов.Затем кнопка «Поиск» скрывается, и отображается вторая кнопка с именем «Новый поиск», которая при щелчке стирает данные, введенные пользователем для первого поиска, и позволяет им ввести новый S / N.

Iискал этот форум и другие и не нашел ответов.Я установил свойства управления повторением 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 голосов
/ 13 июня 2019

Есть несколько улучшений, которые вы должны сделать /

  • связывает pssrl1 с переменной области видимости. Вместо того, чтобы идти за элементом управления, вы читаете / пишете переменную области видимости. Может быть управляемым бином тоже
  • добавить код для очистки searchLiteratureBean. Если коллекция не возвращает участников, повтор не будет отображаться.

Наиболее эффективным способом было бы добавить метод get / setSearchString в ваш searchLiteratureBean. Свяжите свое поле поиска с этим. Есть методы search () и clear () и, в конечном итоге, свойство isSearched (), которое вы можете использовать для просмотра / скрытия.

Поскольку у вас есть компонент, ваша разметка должна содержать только привязки данных. Имеет смысл?

...