1

我已xwiki成功安装并能够使用velocity模板语言生成 wiki 页面。

谁能告诉我如何将 javascript 变量传递给速度模板。我经历了几个论坛,我需要将参数传递给服务器才能得到这个,但我不知道。请在下面找到文件。

<script type="text/javascript">
function generateFunction()
{
  var variable = document.getElementById('text').value;
}
</script> 

#set($test = "variable")
$test
4

2 回答 2

2

您必须从客户端向服务器进行ajax调用。如果您使用的是 jquery,您将有类似的内容:

$.post('/send/my/var', { 'variable' : value });

如果没有 jquery,请参阅此 XmlHttpRequest 文档

然后,在服务器端,/send/my/var URL 应该到达一个模板,您可以在其中执行以下操作:

#set($test = $params.variable)

你会在服务器端用它做一些有用的事情,比如将它存储在会话中、数据库中等。

如果您需要从 Velocity 向 Javascript 发送回一些内容,那么您通常必须格式化 JSON 代码,并向 ajax 调用添加异步完成回调参数:

$.post('/send/my/var', { 'variable' : value }, 
  function(data)
  {
     // do something with data sent back from the server
  });

也可以进行同步调用,即让 javascript 等待服务器响应,但这样做通常不是一个好主意,我不会在这里进行推断。

最后一点,您还应该实施适当的错误处理。以 jQuery 为例,语法是:

$(document).ajaxError(function(event, jqxhr, settings, message)
{
    console.log(message);
});
于 2017-10-27T00:42:01.763 回答
1

做不到,

Apache Velocity 模板是一个服务器端引擎,

这意味着在服务器上,Velocity 将获取模板并尝试渲染,只有在完成模板渲染后,它才会返回给客户端,客户端将执行客户端代码作为 Javascript

速度替代品是freemarker,我发现了类似的问题和答案,问题:

如何使用 javascript 中的参数调用 freemarker 函数

回答:

客户端Web 浏览器代码无法调用服务器端Freemarker 函数

于 2017-10-26T09:02:34.970 回答