将javascript变量传递给velocity variable templete

时间:2017-10-26 07:49:42

标签: velocity xwiki apache-velocity

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

有谁能告诉我,我怎样才能将javascript变量传递给速度模板。我已经通过几个论坛,我需要将参数传递给服务器来获得这个,但我不知道。请找到下面的文件。

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

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

2 个答案:

答案 0 :(得分:2)

你必须从客户端到服务器进行 ajax 调用。如果你正在使用jquery,你会有类似的东西:

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

如果没有jquery,请参阅this XmlHttpRequest documentation

然后,在服务器端,/ 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);
});

答案 1 :(得分:1)

无法完成,

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

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

Velocity替代品是freemarker,我发现类似question and answer,问题:

  

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

答案:

  

客户端网络浏览器代码无法调用服务器端 Freemarker功能