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

zqry0prt  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(325)

我可以再次得到一些帮助。。。
我们在xpages中构建了自己的表单。表单由用户在notes中定义,并通过xpages/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是一个javabean,在执行部分刷新时会丢失formdata。如果我在eventhandler中设置了部分执行模式(数据验证被禁用),我会得到一个错误,即在代码段的最后一行中找不到formdata。如果我清除部分执行模式,我什么也得不到:没有错误,没有java错误,没有ssjs错误,什么都没有。
一定是我不了解对象和变量的生命周期,因为我可能不得不使用valuebindings,但我不知道如何使用。
帮助。。。

ibrsph3r

ibrsph3r1#

我见过datacontext重新计算为null,特别是当依赖于其他datacontext时。我认为在应用请求值阶段。当我有,我改变了代码,只计算在渲染响应阶段。
但是,我认为这对您不起作用,因为switch控件需要在render response之前获得该值,并且没有简单的方法来掌握哪个阶段正在运行。
我将采取的方法是在bean中拥有一个属性(例如。 showTabbed )包含要显示的切换面。调用bean方法在页面加载时设置该属性。然后在部分刷新中,再次调用该方法,检查formulaire字段是否已更改,以确定是否要调用 setShowTabbed(boolean) 再一次。这将最大限度地减少通话次数,应该可以防止问题的发生。

相关问题