Основная идея моего ответа на ваш предыдущий вопрос состояла в том, чтобы поставить input
с вычисленным значением. Что если вы попытаетесь использовать <xp:this.script>
вместо xp:confirm
и получить сообщение о подтверждении от этого скрытого ввода таким же образом?
Обновление
Причина и альтернативное решение, не требующее внесения каких-либо изменений в существующую xpage
Оказалось, что внутренний экземпляр xp:confirm
правильно оценивает новое сообщение. Новое значение даже отправляется в браузер с ответом на запрос ajax. Но одна из функций клиентского модуля XSP
построена так, что он не будет обновлять функцию прослушивателя querySubmit
, если она уже существует с таким именем. Итак, мы застряли со старой функцией подтверждения, которая содержит старое сообщение. Есть способ переопределить это поведение, не нарушая никаких других функций. Я попробовал это, и это работает для меня.
Создать новую библиотеку JavaScript
(на стороне клиента). Добавьте код:
if (!XSP._pushListenerTuned) {
XSP.__pushListener = XSP._pushListener;
XSP._pushListener = function x__pl(listeners, formId, clientId, scriptId, listener) {
if (scriptId && scriptId.endsWith("_confirm")) {
for (var i = 0; i < listeners.length; i++) {
if (scriptId == listeners[i].scriptId) {
listeners.splice(i, 1);
}
}
listeners.push(new this._SubmitListener(formId, listener, clientId, scriptId));
} else {
XSP.__pushListener(listeners, formId, clientId, scriptId, listener);
}
}
XSP._pushListenerTuned = true;
}
Присоедините вашу новую библиотеку как ресурс глобально через тему или как ресурс страницы на нужной странице Я думаю, размещение вышеуказанного кода как scriptBlock
на необходимой странице также должно работать. Теперь любой компонент xp:confirm
на любой странице (если вы использовали ресурс темы) или на определенной странице и везде после посещения этой страницы (если вы использовали ресурс страницы или scriptBlock
), будет работать, как и ожидалось.