Xpages-使用旧值刷新文档
我有一些代码,如果用户在某个字段(Q1)上选择“否”答案,它会删除与Q1相关的子问题的答案,并将它们隐藏在UI中 这很好,我对包含所有问题的div进行了部分刷新。但是,当我单击同一个问题,选择回答“是”,然后显示所有子问题,以便用户可以再次回答它们时,它们仍然具有旧的属性值 当我删除字段时,后端文档会正确地反映这一点,但当我单击问题并在UI中再次显示字段时,它们会以其原始值再次出现在后端文档中。如果在代码末尾执行context.reloadPage(),一切都会按预期工作,但这会破坏其他功能,我只需要部分刷新。有什么想法吗?谢谢Xpages-使用旧值刷新文档,xpages,xpages-ssjs,Xpages,Xpages Ssjs,我有一些代码,如果用户在某个字段(Q1)上选择“否”答案,它会删除与Q1相关的子问题的答案,并将它们隐藏在UI中 这很好,我对包含所有问题的div进行了部分刷新。但是,当我单击同一个问题,选择回答“是”,然后显示所有子问题,以便用户可以再次回答它们时,它们仍然具有旧的属性值 当我删除字段时,后端文档会正确地反映这一点,但当我单击问题并在UI中再次显示字段时,它们会以其原始值再次出现在后端文档中。如果在代码末尾执行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());
}
试试看{
if(compositeData.onClickCode){
compositeData.onClickCode.invoke(facesContext,null);
}
document1.save();
变量fieldName:string=compositeData.fieldName;
//如果用户未选择要从关键字*获取的IFM*更改字段数组,则将所有IFM字段留空
如果(字段名=“Q1”){
打印(“是Q1”);
如果(document1.getItemValueString(fieldName)=“否”){
打印(“无IFM”);
变量问题Fm=[“Q1a”、“Q1b”、“Q1c”、“Q3IFM”、“Q3bIFM”、“Q3cIFM”、“Q3dIFM”、“Q4”、“Q4a”、“Q5IFM”、“Q6IFM”、“Q6aIFM”、“Q7IFM”,
“Q7aIFM”、“Q7bIFM”、“Q8”、“Q8a”、“Q9IFM”、“Q9IFM”、“Q9bIFM”、“Q10IFM”、“Q11IFM”];
var len=问题长度;
对于(i=0;i
您可以使用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>
我可能会迟到,但我找到了从后端文档强制重新加载的方法。您所要做的就是稍微更改数据源的id,方法是在documentId中添加或删除“0”前缀。大概是这样的:
return (viewScope.idPrefix? "0":"") + param.documentId
当您想在部分刷新期间强制重新加载时,只需设置
viewScope.idPrefix= !viewScope.idPrefix;
别忘了将ignoreRequestParams设置为true。谢谢-不过我已经尝试了这两个选项,但仍然存在相同的问题。上一个值在下一次部分刷新时重新出现…是否引发错误?只需在部分刷新区域中添加一个消息组件。没有错误,删除了一个错误消息控件,该控件上没有显示任何内容,我的所有代码日志都记录到openLogger中,以查找错误,但也没有显示任何内容。一切似乎都运行正常,字段被正确地清空,但下一次部分刷新会返回旧值。代码末尾的context.ReloadPage()解决了错误,但我不想完全重新加载我怀疑它仍然在使用内存中的数据源,因为部分刷新不会从后端更新xspDoc……@ChrisRichards:我用一个工作示例更新了我的答案。