Xpages 如何将面板绑定到现有文档数据源或新创建的文档?

Xpages 如何将面板绑定到现有文档数据源或新创建的文档?,xpages,xpages-ssjs,Xpages,Xpages Ssjs,在绑定到onw文档数据源(“父”)的xpage中,我有一个repeat控件,显示一些视图数据(包含从属文档或“响应”),以及一个创建新“响应”文档的按钮。响应数据显示在同一页面上的单独面板中,该面板仅在从重复中选择响应或创建新响应时可见。 文档数据源绑定到“动态”响应文档面板周围的面板,如下所示: <xp:panel id="panelFlDs"> <xp:this.data> <xp:dominoDocument var="dsDocFil

在绑定到onw文档数据源(“父”)的xpage中,我有一个repeat控件,显示一些视图数据(包含从属文档或“响应”),以及一个创建新“响应”文档的按钮。响应数据显示在同一页面上的单独面板中,该面板仅在从重复中选择响应或创建新响应时可见。 文档数据源绑定到“动态”响应文档面板周围的面板,如下所示:

<xp:panel id="panelFlDs">
    <xp:this.data>
        <xp:dominoDocument var="dsDocFileLink" formName="fmFileLink"
            ignoreRequestParams="true">
            <xp:this.documentId><![CDATA[#{javascript:viewScope.get("unidFileLink")}]]></xp:this.documentId>
        </xp:dominoDocument>
    </xp:this.data>
    <xp:panel id="panelFlForm">
        <xp:this.rendered><![CDATA[#{javascript:viewScope.get("showDialogFileLink")=="1"}]]></xp:this.rendered>
        <xc:ccFormFileLink></xc:ccFormFileLink>
    </xp:panel>
</xp:panel>
var panelFlDs:com.ibm.xsp.component.UIPanelEx = getComponent("panelFlDs");
var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
ds.setVar("dsDocFileLink");
ds.setFormName("fmFileLink");
panelFlDs.getData().clear();
panelFlDs.addData(ds);
viewScope.remove("unidFileLink");
viewScope.put("showDialogFileLink", "1");
等等

需要注意的是,我不能在一行中创建两个新文档:第二个和所有后续新文档似乎使用与第一个相同的数据源:它们的可编辑字段显示以前编辑的新文档中的值

我尝试按照Sven Hasselbachs的优秀示例(和)创建新的数据源对象(并清除旧对象),但正如Sven在其博客条目中指出的,我无法立即使用新创建的数据源。因此,我可以创建一个新的ds,但我不能按计划的方式使用继承,因为数据源还不可用

在我尝试返工所有内容并在数据源级别使用带有默认值的可编辑字段开始继承之前:这对我的任务来说是正确的方法吗,还是我应该在某个地方再做一次

编辑:我只是尝试不使用继承,即创建一个新响应,填写一些值,然后保存并关闭(备注:“关闭”隐藏响应数据面板),然后创建第二个新响应。结果:第二个响应同样包含我为第一个响应填写的值。我的“创建已修改的创建”按钮现在如下所示:

<xp:panel id="panelFlDs">
    <xp:this.data>
        <xp:dominoDocument var="dsDocFileLink" formName="fmFileLink"
            ignoreRequestParams="true">
            <xp:this.documentId><![CDATA[#{javascript:viewScope.get("unidFileLink")}]]></xp:this.documentId>
        </xp:dominoDocument>
    </xp:this.data>
    <xp:panel id="panelFlForm">
        <xp:this.rendered><![CDATA[#{javascript:viewScope.get("showDialogFileLink")=="1"}]]></xp:this.rendered>
        <xc:ccFormFileLink></xc:ccFormFileLink>
    </xp:panel>
</xp:panel>
var panelFlDs:com.ibm.xsp.component.UIPanelEx = getComponent("panelFlDs");
var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
ds.setVar("dsDocFileLink");
ds.setFormName("fmFileLink");
panelFlDs.getData().clear();
panelFlDs.addData(ds);
viewScope.remove("unidFileLink");
viewScope.put("showDialogFileLink", "1");
致意


Lothar进入repeat控件的数据源的所有属性。其中有一个“Scope”设置。默认值为viewScope。将其更改为requestScope,这样它就不会保留您创建的第一个文档。那么每一次都应该是一个新的文档。

你不仅节省了我一天的时间,还节省了整整一周的时间!!)在我的例子中,这是“响应”数据源,我想,不是重复的视图ds。)非常感谢。更新:不,不是这样。我可能忘了提到,用户需要能够编辑那些现有的文档。但是现在我设置了ds作用域来请求它正在失去它的句柄。意思是:我可以将打开的文档置于编辑模式,但是如果我点击保存按钮,就不会在ds中写入任何内容,真的。看起来好像我必须寻找完全不同的东西。无论如何,谢谢,这仍然是一条很棒的信息。它看起来像是在计算
documentId
,而不是
action
。每个数据源的
操作
如果是新的,则应为
createDocument
(或null),如果是现有文档,则应为
editDocument
。感谢您的提示,但我也尝试了所有可能的选项(即使是仅在所有属性下可供选择的名为“newDocument”的选项),但是没有任何区别目前我只看到两种可能的解决方案:要么我首先创建一个新的后端文档存根并保存,然后打开它;这很好用,但我愿意这样做;或者我放弃使用动态面板创建文档,而只对现有文档使用它。不太好,但可能是目前唯一的办法。。。