Как вызвать функцию SSJS из вычисленной ссылки HTML?

У меня на xpage есть вычисляемое поле, результатом которого является HTML. В этом HTML я хочу вычислить ссылку, которая вызовет некоторую функцию js на стороне сервера с последующим частичным обновлением.

Мой текущий код выглядит так:

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

Это будет работать, если моя функция js является функцией на стороне клиента, но я хочу использовать эту функцию, чтобы установить значение поля в документе, поэтому мне нужен SSJS.

Статические ссылки, созданные на панели управления в xpage, позволяют ссылке вызывать SSJS с частичным обновлением. Как я могу сделать это с вычисленной ссылкой HTML?

3 ответа

Решение

Вы можете придерживаться своего кода, если вы используете объект XSP в myFunction() функция на стороне клиента. Это позволяет вызвать частичное обновление. Другой вариант - вызвать элемент управления Extlib JSON и сохранить там свою логику. Немного зависит от вашего стиля кодирования

Другим вариантом может быть создание собственного обработчика событий и его выполнение с помощью клиентского 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 относится к контролю, который будет частично обновлен.

Управление ссылками не является статичным. Вы можете вычислить все, что хотите, например:

<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>
Другие вопросы по тегам