Xpages 部分刷新时不会重新计算编辑框默认值
我有一个repeat控件,每行显示一个条目(员工用户名、电子邮件、全名)。 单击用户名(第1列),将弹出一个显示所有员工信息的dojo对话框。在该对话框中,我可以单击编辑按钮并编辑员工信息 我没有使用数据源,因为员工数据位于第三个数据库中,不允许我直接访问。因此,我在编辑时使用sessionAsSigner来存储数据(签名者是可以访问第三个nsf的帐户) 因此,我不使用数据源,而是使用“default value”属性将数据加载到只读编辑框中。单击“编辑”时,我将它们设置为只读(false),并部分刷新面板,以便编辑它们。之后,我单击保存按钮将它们保存回文档(始终使用sessionAsSigner),然后将文件设置回只读,并再次部分刷新面板。 (我必须指出,我有4个字段,但只有3个可以编辑。4rth始终处于只读模式,因为它是员工代码,不得更改。) 在这里之前一切都很好。问题是当我编辑一名员工,然后单击下一名员工(在重复控件中)再次编辑时。弹出窗口再次出现,但保留了以前的员工数据。这意味着默认值不起作用,尽管我在弹出面板上进行了部分刷新。部分刷新有效,因为员工代码字段(永久只读字段)显示正确的员工代码,但所有可编辑字段都有以前的数据 我通过完全刷新页面(location.reload())解决了这个问题,但我更愿意避免完全刷新 所以问题是我使用的是默认值属性。似乎在部分刷新中不会重新计算,而只在完全刷新中重新计算Xpages 部分刷新时不会重新计算编辑框默认值,xpages,lotus-domino,Xpages,Lotus Domino,我有一个repeat控件,每行显示一个条目(员工用户名、电子邮件、全名)。 单击用户名(第1列),将弹出一个显示所有员工信息的dojo对话框。在该对话框中,我可以单击编辑按钮并编辑员工信息 我没有使用数据源,因为员工数据位于第三个数据库中,不允许我直接访问。因此,我在编辑时使用sessionAsSigner来存储数据(签名者是可以访问第三个nsf的帐户) 因此,我不使用数据源,而是使用“default value”属性将数据加载到只读编辑框中。单击“编辑”时,我将它们设置为只读(false),并
有什么建议吗?我在这里看到了一些潜在的问题,尽管我在某些方面可能是错的;您需要更加精确,并给我们一些编码示例,以便我们可以看到您迄今为止所尝试的: 首先,使用什么属性将数据输入到编辑框并不重要:如果弹出窗口显示的数据来自错误的重复条目,那么问题很可能在于将编辑框的值传递到弹出窗口的方式 问题是:您对这些编辑框使用什么样的绑定?不知道你尝试了什么,很难给你一个暗示;我可能会尝试将它们绑定到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个字段,你就不必担心性能问题。如果没有看到代码,很难找出问题的原因,但从我能从你的问题中得到的答案,我想会的最好重新设计一下。以下提示我将如何解决此问题:
对于这个示例,我使用数组作为数据源,您可以