Передача переменной 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 на стороне сервера

Другие вопросы по тегам