Xpages 部分刷新时不会重新计算编辑框默认值

Xpages 部分刷新时不会重新计算编辑框默认值,xpages,lotus-domino,Xpages,Lotus Domino,我有一个repeat控件,每行显示一个条目(员工用户名、电子邮件、全名)。 单击用户名(第1列),将弹出一个显示所有员工信息的dojo对话框。在该对话框中,我可以单击编辑按钮并编辑员工信息 我没有使用数据源,因为员工数据位于第三个数据库中,不允许我直接访问。因此,我在编辑时使用sessionAsSigner来存储数据(签名者是可以访问第三个nsf的帐户) 因此,我不使用数据源,而是使用“default value”属性将数据加载到只读编辑框中。单击“编辑”时,我将它们设置为只读(false),并

我有一个repeat控件,每行显示一个条目(员工用户名、电子邮件、全名)。 单击用户名(第1列),将弹出一个显示所有员工信息的dojo对话框。在该对话框中,我可以单击编辑按钮并编辑员工信息

我没有使用数据源,因为员工数据位于第三个数据库中,不允许我直接访问。因此,我在编辑时使用sessionAsSigner来存储数据(签名者是可以访问第三个nsf的帐户)

因此,我不使用数据源,而是使用“default value”属性将数据加载到只读编辑框中。单击“编辑”时,我将它们设置为只读(false),并部分刷新面板,以便编辑它们。之后,我单击保存按钮将它们保存回文档(始终使用sessionAsSigner),然后将文件设置回只读,并再次部分刷新面板。 (我必须指出,我有4个字段,但只有3个可以编辑。4rth始终处于只读模式,因为它是员工代码,不得更改。)

在这里之前一切都很好。问题是当我编辑一名员工,然后单击下一名员工(在重复控件中)再次编辑时。弹出窗口再次出现,但保留了以前的员工数据。这意味着默认值不起作用,尽管我在弹出面板上进行了部分刷新。部分刷新有效,因为员工代码字段(永久只读字段)显示正确的员工代码,但所有可编辑字段都有以前的数据

我通过完全刷新页面(location.reload())解决了这个问题,但我更愿意避免完全刷新

所以问题是我使用的是默认值属性。似乎在部分刷新中不会重新计算,而只在完全刷新中重新计算


有什么建议吗?

我在这里看到了一些潜在的问题,尽管我在某些方面可能是错的;您需要更加精确,并给我们一些编码示例,以便我们可以看到您迄今为止所尝试的:

首先,使用什么属性将数据输入到编辑框并不重要:如果弹出窗口显示的数据来自错误的重复条目,那么问题很可能在于将编辑框的值传递到弹出窗口的方式

问题是:您对这些编辑框使用什么样的绑定?不知道你尝试了什么,很难给你一个暗示;我可能会尝试将它们绑定到viewScope变量,您可以在文档生命周期中尽早设置这些变量。我会尝试使用一个命名javascript对象数组,该数组可以用作重复的数据源。然后,您的弹出窗口可以使用repeat的index var param来获取正确的表行,并使用对象的name引用来获取列

其次,在创建文档数据源时创建一个默认值,作为对用户的建议。我从未尝试过,但我不认为部分刷新可以创建新的默认值。但是,我认为这不是真正的问题


如果我误解了你的意思,请尽量准确地描述你的任务等。

我在这里看到了一系列潜在问题,尽管我在某些方面可能是错的;您需要更加精确,并给我们一些编码示例,以便我们可以看到您迄今为止所尝试的:

首先,使用什么属性将数据输入到编辑框并不重要:如果弹出窗口显示的数据来自错误的重复条目,那么问题很可能在于将编辑框的值传递到弹出窗口的方式

问题是:您对这些编辑框使用什么样的绑定?不知道你尝试了什么,很难给你一个暗示;我可能会尝试将它们绑定到viewScope变量,您可以在文档生命周期中尽早设置这些变量。我会尝试使用一个命名javascript对象数组,该数组可以用作重复的数据源。然后,您的弹出窗口可以使用repeat的index var param来获取正确的表行,并使用对象的name引用来获取列

其次,在创建文档数据源时创建一个默认值,作为对用户的建议。我从未尝试过,但我不认为部分刷新可以创建新的默认值。但是,我认为这不是真正的问题


如果我弄错了,请尽量准确地描述您的任务等。

在没有看到代码的情况下,很难找出导致您出现问题的原因,但从我能从您的问题中得到的信息来看,我认为最好重新设计一下。以下提示我将如何解决此问题:

对于这个示例,我使用数组作为数据源,如果从文档中加载的sessionAsSigner数据不是很大,您也可以使用它,但我更喜欢一个bean或一个对象数据源,这样我就可以绑定到我的repeat控件

<xp:panel id="repeatHolder">
    <xp:repeat
        id="repeat1"
        rows="30"
        var="rowEntry"
        indexVar="rowIndex">
        <xp:this.value><![CDATA[#{javascript://loading data with sessionAsSigner
            var person1 = {"name":"Igor","value":"value","age":"20","unid":"unid"};
            var person2 = {"name":"Victor","value":"value","age":"30","unid":"unid"};
            //end loading data              
            return [person1,person2];}]]>
        </xp:this.value>
        <xp:panel>
            <xp:text
                escape="true"
                id="computedField1"
                value="#{rowEntry.name}">
            </xp:text>
            <xp:text
                escape="true"
                id="computedField2"
                value="#{rowEntry.value}">
            </xp:text>
            <xp:button
                value="edit"
                id="edit">
                <xp:eventHandler
                    event="onclick"
                    submit="false">
                    <xp:this.script><![CDATA[XSP.openDialog('#{id:editDialog}');]]></xp:this.script>
                </xp:eventHandler>
            </xp:button>
            <xe:dialog
                id="editDialog"
                title="edit"
                preload="false">
                <xp:panel>
                    <xp:panel>
                        <xp:inputText
                            id="inputText1"
                            defaultValue="#{rowEntry.name}">
                        </xp:inputText>
                    </xp:panel>
                    <xp:panel readonly="true">
                        <xp:inputText
                            id="inputText2"
                            defaultValue="#{rowEntry.value}">
                        </xp:inputText>
                    </xp:panel>
                    <xp:button
                        value="save"
                        id="button1">
                        <xp:eventHandler
                            event="onclick"
                            submit="true"
                            refreshMode="complete">
                            <xp:this.action><![CDATA[#{javascript://run save actionAsSigner for doc:unid}]]></xp:this.action>
                        </xp:eventHandler>
                    </xp:button>
                </xp:panel>

                <xp:eventHandler
                    event="onHide"
                    submit="true"
                    refreshMode="partial"
                    refreshId="repeatHolder">
                    <xe:this.action><![CDATA[#{javascript://refresh view}]]></xe:this.action>
                </xp:eventHandler>
            </xe:dialog>
            <br></br>
        </xp:panel>
    </xp:repeat>    
</xp:panel>




我也会每行使用一个对话框,只要你使用
xe:Dialog
preload=false
,如果你只使用它编辑3个字段,你就不必担心性能问题。

如果没有看到代码,很难找出问题的原因,但从我能从你的问题中得到的答案,我想会的最好重新设计一下。以下提示我将如何解决此问题:

对于这个示例,我使用数组作为数据源,您可以