Передача переменной javascript в шаблон переменной скорости
Я установил xwiki
успешно и в состоянии генерировать вики-страницы, используя velocity
язык шаблонов.
Может ли кто-нибудь, пожалуйста, скажите мне, как я могу передать переменную javascript в templete скорости. Я прошел несколько форумов, которые мне нужно передать параметр на сервер, чтобы получить это, но я понятия не имею. Пожалуйста, найдите файлы ниже.
<script type="text/javascript">
function generateFunction()
{
var variable = document.getElementById('text').value;
}
</script>
#set($test = "variable")
$test
2 ответа
Вы должны сделать ajax- вызов от клиента к серверу. Если вы используете jquery, у вас будет что-то вроде:
$.post('/send/my/var', { 'value' : variable });
Без jquery см. Эту документацию XmlHttpRequest.
Затем на стороне сервера URL-адрес / send / my / var должен найти шаблон, в котором вы можете выполнить следующие действия:
#set($test = $params.variable)
И вы могли бы сделать что-то полезное с ним на стороне сервера, например, сохранить это в сеансе, в базе данных и т. Д.
Если вам нужно что-то отправить обратно из Velocity в Javascript, вам, как правило, придется форматировать код JSON и добавить параметр обратного вызова асинхронного завершения в вызов ajax:
$.post('/send/my/var', { 'value' : variable },
function(data)
{
// do something with data sent back from the server
});
Также возможно иметь синхронные вызовы, то есть javascript, ожидающий ответа сервера, но обычно это плохая идея, и я не буду здесь экстраполировать его.
И последнее замечание: вы должны также реализовать правильную обработку ошибок. С jQuery, например, синтаксис будет:
$(document).ajaxError(function(event, jqxhr, settings, message)
{
console.log(message);
});
Это не может быть сделано,
Шаблон Apache Velocity является серверным движком,
Это означает, что на сервере Velocity получит шаблон и попытается отрендерить, только после того, как он закончит рендеринг шаблона, он будет возвращен клиенту, который выполнит код клиента как Javascript.
Альтернативой скорости является freemarker, на который я нашел похожий вопрос и ответ, Вопрос:
Как вызвать функцию freemarker с параметром из JavaScript
Ответ:
В коде веб-браузера на стороне клиента нет способа вызвать функцию Freemarker на стороне сервера