You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Polarion技术问询:如何将JS变量值传入Velocity变量及日期变量问题

问题解答

1. JavaScript变量无法传入Velocity变量的核心原因

Velocity是服务器端模板引擎,页面渲染流程是先执行所有Velocity代码生成最终的HTML/JS内容,之后JavaScript才会在客户端浏览器中运行。两者处于完全分离的执行阶段,因此客户端的JS变量值无法回溯修改服务器端的Velocity变量——等JS开始运行时,Velocity已经完成了页面的渲染工作。

你提到的反向操作(Velocity变量传入JS)可行,是因为Velocity可以直接将变量值嵌入到生成的JS代码中,比如:

<script>
  var jsWorkItemCount = "$workItemCount";
</script>

2. 解决近7天工作项数量的需求

你遇到的$today变量不生效,是因为Velocity默认没有这个内置变量,需要通过日期工具类手动生成符合查询语法的日期范围。

具体实现方法(基于Velocity DateTool)

多数企业级平台会默认集成Velocity的DateTool工具类,直接用它生成日期范围即可:

#set($dateTool = $velocityToolbox.get("dateTool"))
#set($today = $dateTool.format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", $dateTool.now()))
#set($sevenDaysAgo = $dateTool.format("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", $dateTool.addDays($dateTool.now(), -7)))

#set($newSrFilter = $transaction.workItems.search.query("type:changerequest AND created:[$sevenDaysAgo TO $today]"))
#set($workItemCount = $newSrFilter.size())

关键说明:

  • $dateTool.addDays($dateTool.now(), -7):直接计算出7天前的时间
  • 日期格式可根据你的工作项查询语法调整,比如不需要时分秒的话,改成yyyy-MM-dd即可
  • 最后通过$newSrFilter.size()获取到近7天的工作项总数

3. 关于页面参数尝试的补充

你之前用$pageParameter.VARIABLE.value()的思路,本质还是服务器端的参数传递逻辑,无法解决客户端JS到Velocity的变量传递问题——页面参数是在请求发起阶段就确定的,和后续JS运行阶段完全无关。

内容的提问来源于stack exchange,提问作者Julien Llanes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 15:10:18