XPages:在部分刷新的自定义控件中丢失变量

时间:2015-01-15 10:56:52

标签: java xpages javabeans

我可以再次提供一些帮助......

我们在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,但我不知道如何。

...帮助

1 个答案:

答案 0 :(得分:0)

我已经看到dataContexts重新计算为null,特别是在依赖于其他dataContexts时。我认为在Apply Request Values阶段。当我这样做时,我将代码更改为仅在渲染响应阶段计算。

但是,我不认为这对你有用,因为Switch控件在渲染响应之前需要这个值,并且没有简单的方法来掌握正在运行的其他阶段。

我采取的方法是在您的bean中拥有一个属性(例如showTabbed),该属性包含要显示的Switch facet。调用bean方法在页面加载时设置该属性。然后在部分刷新中,再次调用该方法,检查Formulaire字段是否已更改,以确定是否再次调用setShowTabbed(boolean)。这样可以将呼叫次数减少到更多,并且可以防止出现问题。