XPages保存数据源和新的doc更改以前的doc

时间:2013-01-29 13:31:31

标签: xpages xpages-ssjs

我有一个绑定到面板的文档数据源(没有父ID的创建文档)。在面板中我有2个其他面板。在完成面板1中的字段后,我单击一个链接以显示第二个面板,并在其上有一个保存按钮。保存后,文档会正确显示在数据库中。

保存按钮执行dds保存,然后清除所有字段,并在外部面板上进行部分更新,并在该面板上执行部分执行,因为我在主面板外部的XPage上有其他dds。

如果我现在创建另一个文档,则先前的文档会更新,而不是创建新文档。我已经为dds和其他选项尝试了不同的范围。不知道下一步该尝试什么。

任何人都知道问题是什么?

3 个答案:

答案 0 :(得分:9)

以下是如何使用部分刷新添加新数据源的示例:

<xp:panel id="myPanel">
    <xp:this.data>
        <xp:dominoDocument var="document1"></xp:dominoDocument>
    </xp:this.data>
    <xp:br></xp:br>
    <xp:inputText id="inputText1" value="#{document1.Test}"></xp:inputText>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:button value="Save" id="buttonSave">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="partial" refreshId="myPanel">
            <xp:this.action>

                <xp:actionGroup>
                    <xp:saveDocument var="document1"></xp:saveDocument>
                    <xp:executeScript>
                        <xp:this.script>
                            <![CDATA[#{javascript:
                                var panel = getComponent("myPanel");
                                var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
                                ds.setComponent(panel);
                                ds.setVar("document1");
                                panel.getData().clear();
                                panel.addData(ds);
                            }]]>
                        </xp:this.script>
                    </xp:executeScript>
                </xp:actionGroup>
            </xp:this.action>
        </xp:eventHandler>
    </xp:button>
</xp:panel>

希望这有帮助

斯文

修改

添加了 clear()以从面板中删除所有先前定义的数据源。

答案 1 :(得分:0)

这是默认行为。如果您不想重新加载整个页面,则单击“保存”按钮时,一个选项是删除数据源并在SSJS事件中创建新文档。

答案 2 :(得分:0)

我成功地使用了Sven的答案,但是,我必须在服务器端添加额外的一行JavaScript

<xp:executeScript>
    <xp:this.script>
        <![CDATA[#{javascript:
            var panel = getComponent("myPanel");
            var ds = new com.ibm.xsp.model.domino.DominoDocumentData();
            ds.setComponent(panel);
            ds.setVar("document1");
            ds.setFormName('form1');
            panel.getData().clear();
            panel.addData(ds);
            }]]>
    </xp:this.script>
</xp:executeScript>