Xpages - обновление документа со старыми значениями - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть некоторый код, который, если пользователь выбирает ответ «НЕТ» в определенном поле (Q1), удаляет ответы на подвопрос, относящиеся к Q1, а также скрывает их в пользовательском интерфейсе.

Это прекрасно работает, и я делаю частичное обновление в div, содержащем все вопросы.Однако, когда я затем нажимаю на тот же вопрос, выбирая ответ «Да», который затем показывает все подвопросы, чтобы пользователь мог ответить на них снова, им все еще присваиваются старые значения.

Когда я удаляю поляв бэкэнд-документе это отражается правильно, но затем, когда я нажимаю на вопрос, который снова отображает поля в пользовательском интерфейсе, они снова появляются в бэкэнд-документе со своим исходным значением.Если я выполняю context.reloadPage () в конце моего кода, все работает как положено, но это нарушает другие функции, и я хочу только частичное обновление.Есть идеи?Спасибо

try{

    if (compositeData.onClickCode) {
        compositeData.onClickCode.invoke( facesContext, null );
    } 

    document1.save();   
    var fieldName:string = compositeData.fieldName; 

//Blank all IFM fields if user selects no IFM *CHANGE FIELDS ARRAY TO GET FROM KEYWORD*     
if (fieldName == "Q1") {
 print("Yes Q1");
    if(document1.getItemValueString(fieldName)=="No") {
     print("NO IFMS");
        var questionsIFM = ["Q1a", "Q1b", "Q1c", "Q3IFM", "Q3bIFM", "Q3cIFM", "Q3dIFM", "Q4", "Q4a" ,"Q5IFM", "Q6IFM", "Q6aIFM", "Q7IFM",
        "Q7aIFM", "Q7bIFM", "Q8", "Q8a", "Q9IFM", "Q9aIFM", "Q9bIFM", "Q10IFM", "Q11IFM"];  

        var len = questionsIFM.length;
        for (i = 0; i < len; i++) { 
            print("Field Name: " + questionsIFM[i]);
            document1.removeItem(questionsIFM[i]);
        }
            document1.save();
            //context.reloadPage();
    }
}

    var guidanceOptions:string = "";    
    if (compositeData.guidanceOptions) {
        if(@IsMember(document1.getItemValueString(fieldName), compositeData.guidanceOptions)){
            guidanceOptions = document1.getItemValueString(fieldName);
        }   
    }   

    viewScope.guidance = compositeData.fieldName+guidanceOptions;

}catch(e){
    openLogBean.addError(e,this.getParent());
}

1 Ответ

0 голосов
/ 06 декабря 2018

Вместо изменения внутреннего документа вы можете обновить источник данных с помощью doc.setValue('fieldName','')

Альтернативно, вы можете изменить область действия источника данных на " request ", это заставит источник данных кперезагрузите внутренний документ для каждого запроса.

РЕДАКТИРОВАТЬ:

Вот пример для непосредственного обновления источника данных (кнопка «Очистить»), который всегда работает и обновление компонента(Кнопка «Обновить»).

Если нажать кнопку «Перезагрузить», изменения в полях «сохраняются» в компоненте.Кнопка «Обновить» выполняет частичное обновление (которое скрывает поле ввода), поэтому значение теряется.

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:this.data>
        <xp:dominoDocument
            var="document1"></xp:dominoDocument>
    </xp:this.data>

    <xp:div
        id="refreshMe">
        <xp:inputText
            id="inputText1"
            value="#{document1.foo}"></xp:inputText>

        <xp:inputText
            id="inputText2"
            value="#{document1.bar}"
            rendered="#{javascript:facesContext.isAjaxPartialRefresh() == false}">
        </xp:inputText>

    </xp:div>

    <xp:button
        value="Update"
        id="buttonUpdate">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial"
            refreshId="refreshMe">
        </xp:eventHandler>
    </xp:button>

    <xp:button
        value="Clear"
        id="buttonClear">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="partial"
            refreshId="refreshMe">
            <xp:this.action><![CDATA[#{javascript:document1.setValue('foo', '');document1.setValue('bar', '')}]]></xp:this.action>
        </xp:eventHandler>
    </xp:button>


    <xp:button
        value="Reload"
        id="buttonReload">
        <xp:eventHandler
            event="onclick"
            submit="true"
            refreshMode="complete">
        </xp:eventHandler>
    </xp:button>

</xp:view>
...