我可以再次提供一些帮助......
我们在XPage中构建了自己的表单。表单由Notes中的用户定义,并通过XPage / web使用。我们添加了几个托管bean,以更好地掌握页面使用的数据和控件。整个事情是严重嵌套的,窗体控件可以在页面上多次使用,也可以使用重复控件,现在我需要部分刷新面板。
部分代码:
<xp:panel id="ccAnyForm">
<xp:this.dataContexts>
<xp:dataContext var="formulaire">
<xp:this.value><![CDATA[#{javascript:compositeData.formName || compositeData.dataSource.getItemValueString("Formulaire")}]]></xp:this.value>
</xp:dataContext>
<xp:dataContext var="formdata">
<xp:this.value><![CDATA[#{javascript:PageData.getForm(formulaire, compositeData.dataSource)}]]></xp:this.value>
</xp:dataContext>
</xp:this.dataContexts>
<xp:panel id="aFormulaire${javascript:compositeData.name}">
<xe:switchFacet id="switchFacet1">
<xe:this.selectedFacet><![CDATA[#{javascript:formdata.isTabbed()? "tabbed": "flat"}]]></xe:this.selectedFacet>
PageData是一个Java bean,在进行部分刷新时我丢失了 formdata 。如果我在EventHandler中设置设置部分执行模式(数据验证已禁用),则会在代码段的最后一行显示错误消息 formdata not found 。如果我清除部分执行模式,我什么都得不到:没有错误,没有Java错误,没有SSJS错误,什么都没有。
一定是我对对象和变量的生命周期缺乏了解,因为我可能不得不使用ValueBindings,但我不知道如何。
...帮助
答案 0 :(得分:0)
我已经看到dataContexts重新计算为null,特别是在依赖于其他dataContexts时。我认为在Apply Request Values阶段。当我这样做时,我将代码更改为仅在渲染响应阶段计算。
但是,我不认为这对你有用,因为Switch控件在渲染响应之前需要这个值,并且没有简单的方法来掌握正在运行的其他阶段。
我采取的方法是在您的bean中拥有一个属性(例如showTabbed
),该属性包含要显示的Switch facet。调用bean方法在页面加载时设置该属性。然后在部分刷新中,再次调用该方法,检查Formulaire字段是否已更改,以确定是否再次调用setShowTabbed(boolean)
。这样可以将呼叫次数减少到更多,并且可以防止出现问题。