2

我有一个按钮,单击该按钮我有客户端代码来设置viewScope值:

  var val = 'TEST_VALUE';
  "#{javascript: viewScope.testVal = " + val + "}" 

在该按钮的服务器端,我试图获取 viewScope 值:

print("ViewScope val " + viewScope.testVal); 

而不是变量值,变量名被存储在ViewScope.

4

1 回答 1

5

CSJS 中的 SSJS 是在呈现页面时在服务器上计算的,SSJS 被替换为结果。所以你的 CSJS 没有运行 SSJS。浏览器作为客户端的本质是不能运行服务器端代码的。因此,您可以将 SSJS 的结果包含在一段 CSJS 中,但自上次在服务器上重新计算 SSJS 并传递给浏览器以来,它不会更新值。

您不能通过 CSJS(客户端 JS)更新 viewScope 变量,因为 viewScope 变量仅保存在服务器上。它是服务器端地图,而不是客户端浏览器 cookie。所以它只能通过服务器端代码或帖子来更新以运行服务器端代码。

如果您想使用 CSJS 中的内容更新 viewScope 变量,您需要使用该值更新隐藏输入,将该隐藏输入绑定到 viewScope 变量并运行部分刷新以将隐藏输入的内容发布到服务器。如果它在页面的其他地方,只需使用 SSJS 访问组件/数据源并避免使用 CSJS,但不清楚您的用例是什么。

于 2013-05-29T15:47:14.950 回答