我已成功安装xwiki
并能够使用velocity
模板语言生成维基页面。
有谁能告诉我,我怎样才能将javascript变量传递给速度模板。我已经通过几个论坛,我需要将参数传递给服务器来获得这个,但我不知道。请找到下面的文件。
<script type="text/javascript">
function generateFunction()
{
var variable = document.getElementById('text').value;
}
</script>
#set($test = "variable")
$test
答案 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功能