流体模板:将 javascript 变量作为参数值传递?

fluid template: passing a javascript varible as the argument value?

对于我的流体列表模板中的 f:link 显示操作,我想将一个 javascript 变量传递给参数,基本上是 uid(将特定对象传递给 showAction),但它不按我打算的方式工作。是否有针对此特定问题的解决方法?

裸模板是这样的:

  <f:for each="{termins}" as="termin"> 
    <tr>
      <td><f:link.action action="show" arguments="{termin : termin}"> {termin.mitarbeiter}</f:link.action></td>
      <td><f:link.action action="show" arguments="{termin : termin}"> {termin.kunde}</f:link.action></td>
    </tr>
  </f:for>
</table>

JS 是在流体模板之后工作的东西。正确的顺序是,您的流体模板被解析为 HTML,然后浏览器将 HTML/JS/CSS 呈现给您。所以,你不能指望在你的流体模板中使用 JS 值。

你不能 - 而且你也不能(阅读:永远不应该)从 JS 生成 links 到控制器操作,因为它需要生成安全校验和。修改您创建的 URL 将产生安全错误。校验和的存在是为了防止 DDOS,所以它有充分的理由。

有两种选择:

  • 您可以提前生成所有link
  • 您可以创建一个使用 XHR 调用的 link 生成服务,以从 JS 生成必要的 link。

只有第一个适合您的用例。特别是因为您想传递始终引用数据库中对象的 UID 值 - 这意味着您可以轻松地为所有可能的详细视图生成 link 列表,然后 read/pass links 从你的 JS 到 select 正确的。

有两种可能:

1) 代替 link 使用表格并通过 POST 传输。使用 JavaScript 动态设置表单字段。这样您的变量就不会包含在 (cHash-) 校验和中。

2) 创建一个接受您的变量作为参数的 AJAX 操作。让它生成一个有效的link。使用 POST 用您的可变数据调用它。使用 JavaScript 在您的页面上显示 link。