如何从xe:toolbar basicleafnode保存(提交)文档?

时间:2014-02-18 12:22:07

标签: xpages xpages-extlib

我非常希望使用xe:toolbar控件来保存文档,但我无法弄清楚如何执行此操作。 我有这个代码,发现导航很容易。但是节约......

<xe:toolbar
    id="toolbar2">
    <xe:this.treeNodes>
        <xe:basicLeafNode
            href="whereToGo.xsp"
            label="Save and close">
            <xe:this.onClick>
                <![CDATA["<WHAT GOES HERE?>"]]>
            </xe:this.onClick>
        </xe:basicLeafNode>
    </xe:this.treeNodes>
</xe:toolbar>

4 个答案:

答案 0 :(得分:1)

basicLeafNode的onClick事件仅适用于客户端JS。您需要使用每个basicLeafNode的submitValue属性,然后将SSJS添加到outline控件的onItemClick事件中。然后,您可以使用context.getSubmittedValue()来检查单击的节点,然后相应地执行操作。

请在此处查看我的回答:https://stackoverflow.com/a/14760609/785061

答案 1 :(得分:0)

问题是你只有clientSide onClick。您可以从ClientSide调用SSJS EventHanlder,如Jeremy Hodge.描述的

对于这个例子,我使用了Jeremy的完整executeOnServer脚本,但我认为你可以改变一下。我还使用了完全刷新,如果你不想刷新整个页面,你也可以使用部分刷新。

    <xe:toolbar
        id="toolbar2">
        <xe:this.treeNodes>
            <xe:basicLeafNode
                href="whereToGo.xsp"
                label="Save and close"
                onClick="executeOnServer('saveDocument');">
            </xe:basicLeafNode>
        </xe:this.treeNodes>
    </xe:toolbar>

    <xp:scriptBlock>
        <xp:this.value><![CDATA[

    var executeOnServer = function () {
        if (!arguments[0])
            return false;

        var functionName = arguments[0];
        var refreshId = (arguments[1]) ? arguments[1] : "@none";
        var form = (arguments[1]) ? XSP.findForm(arguments[1]) : dojo.query('form')[0];
        var options = (arguments[2]) ? arguments[2] : {};
        dojo.query('[name="$$xspsubmitid"]')[0].value = form.id + ':' + functionName;
        XSP._partialRefresh("post", form, refreshId, options);

    }
]]></xp:this.value>
    </xp:scriptBlock>

    <xp:eventHandler event="saveDocument" submit="false"
        id="saveDocument">
        <xp:this.action>
        <xp:actionGroup>
            <xp:executeScript>
                <xp:this.script><![CDATA[#{javascript:println("save")}]]></xp:this.script>
            </xp:executeScript>
            <xp:save></xp:save>
        </xp:actionGroup>
    </xp:this.action>
    </xp:eventHandler>

另一种方式(如Oliver已经提到的)使用放置在隐藏div中的真实按钮。

答案 2 :(得分:0)

这是我最终做的事情。 Per的建议导致调查工具栏的onItemClick事件,结果很简单。 感谢所有人的贡献!

<xp:this.data>
    <xp:dominoDocument
        var="docPrognosis"
        formName="prognosis"
        computeWithForm="onsave">
    </xp:dominoDocument>
</xp:this.data>
<xe:toolbar
    id="toolbar1">
    <xe:this.treeNodes>
        <xe:basicLeafNode
            label="Save"
            submitValue="save">
        </xe:basicLeafNode>
    </xe:this.treeNodes>
    <xp:eventHandler
        event="onItemClick"
        submit="true"
        refreshMode="complete">
        <xe:this.action>
            <![CDATA[#{javascript:
            if (context.getSubmittedValue() == "save") {
                if (docPrognosis.save()) {
                    context.redirectToPage("prognosisview.xsp");
                }
            }
        }]]></xe:this.action>
    </xp:eventHandler>
</xe:toolbar>

答案 3 :(得分:0)

如果要使用简单操作(保存文档),则:设置工具栏并使用提交值保存节点=&#39;保存&#39;然后在简单的actins中添加具有条件公式的操作组:context.getSubmittedValue()==&#34; save&#34;。现在为此操作添加简单操作。