将javascript变量传递给velocity变量模板

将javascript变量传递给velocity变量模板,velocity,xwiki,apache-velocity,Velocity,Xwiki,Apache Velocity,我已经成功安装了xwiki,并且能够使用velocity模板语言生成wiki页面 谁能告诉我如何将javascript变量传递给velocity templete。我已经通过几个论坛,我需要把参数传递给服务器,以获得这个,但我不知道。请查找下面的文件 <script type="text/javascript"> function generateFunction() { var variable = document.getElementById('text').value;

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

谁能告诉我如何将javascript变量传递给velocity templete。我已经通过几个论坛,我需要把参数传递给服务器,以获得这个,但我不知道。请查找下面的文件

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

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

函数generateFunction()
{
var变量=document.getElementById('text')。值;
}
#设置($test=“variable”)
$test
这是不可能的

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

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

Velocity alternative是freemarker,我也发现了类似的问题:

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

答复:

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

您必须从客户端向服务器发出ajax调用。如果您使用的是jquery,则会出现以下情况:

$.post('/send/my/var', { 'variable' : value });
如果没有jquery,请参阅

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

您使用的是velocity还是velocity.js?您好,我使用的是velocity(ApacheVelocity模板语言),非常感谢您的回复,我认为这对我帮助很大。实际上,服务器端的velocity应该是{{{{set($test=$request.value)}与XWiki一起使用