如何从计算的HTML链接调用SSJS函数?

时间:2013-10-24 20:33:19

标签: xpages xpages-ssjs

我在xpage上有一个计算字段,其结果是HTML。在那个HTML中,我想计算一个链接,它将触发一些服务器端js函数,然后进行部分刷新。

我目前的代码如下:

<a href="#" onclick="return myFunction()">Click Here</a>

如果我的js函数是客户端函数,但是我想使用这个函数来设置文档中字段的值,这样我就需要SSJS。

从xpage中的控件托盘创建的静态链接允许链接通过部分刷新调用SSJS。如何使用计算的HTML链接执行此操作?

3 个答案:

答案 0 :(得分:3)

另一个选项可能是创建自己的事件处理程序并通过此 article 中描述的客户端JavaScript代码执行该处理程序。所以假设您创建了一个类似这样的事件处理程序:

<xp:eventHandler event="name" id="eventhandler1a">
    <xp:this.action>
        <xp:saveDocument />
    </xp:this.action>
</xp:eventHandler>

然后,您可以创建一个函数来通过JavaScript代码调用此事件处理程序:

XSP.executeOnServer = function () {
    // the event handler id to be executed is the first argument, and is required
    if (!arguments[0])
        return false;
    var functionName = arguments[0];

    // OPTIONAL - The Client Side ID that is partially refreshed after executing the event handler
    var refreshId = (arguments[1]) ? arguments[1] : "@none";
    var form = (arguments[1]) ? this.findForm(arguments[1]) : dojo.query('form')[0];

    // catch all in case dojo element has moved object outside of form...
    if (!form)
        form = dojo.query('form')[0];

    // OPTIONAL - Options object containing onStart, onComplete and onError functions for the call to the
    // handler and subsequent partial refresh
    var options = (arguments[2]) ? arguments[2] : {};

    // OPTIONAL - Value to submit in $$xspsubmitvalue. can be retrieved using context.getSubmittedValue()
    var submitValue = (arguments[3]) ? arguments[3] : '';

    // Set the ID in $$xspsubmitid of the event handler to execute
    dojo.query('[name="$$xspsubmitid"]')[0].value = functionName;
    dojo.query('[name="$$xspsubmitvalue"]')[0].value = submitValue;
    this._partialRefresh("post", form, refreshId, options);
}

然后,您可以通过此客户端JavaScript代码调用事件处理程序:

XSP.executeOnServer('#{id:eventhandler1a}', '#{id:panel1}')

此处panel1指的是部分刷新的控件。

答案 1 :(得分:1)

链接控件不是静态的。您可以计算任何您想要的内容,例如:

<xp:link escape="true" id="lnk">
   <xp:this.value><![CDATA[#{javascript:"#"}]]></xp:this.value>
   <xp:this.text><![CDATA[#{javascript:"Label here"}]]></xp:this.text>
</xp:link>

答案 2 :(得分:1)

如果在myFunction()客户端功能中使用XSP对象,则可以坚持使用代码。这允许您调用部分刷新。另一种选择是调用Extlib JSON控件并在那里使用你的逻辑。取决于你的编码风格