我有一个按钮,点击该按钮我有客户端代码来设置viewScope
值:
var val = 'TEST_VALUE';
"#{javascript: viewScope.testVal = " + val + "}"
在该按钮的服务器端,我试图获取viewScope值:
print("ViewScope val " + viewScope.testVal);
变量名称不是变量值,而是存储在ViewScope
。
答案 0 :(得分:5)
CSJS中的SSJS是在呈现页面时在服务器上计算的,并且SSJS被替换为结果。所以你是CSJS没有运行SSJS。由于它是客户端的本质,浏览器不能运行服务器端代码。因此,您可以将SSJS的结果包含在一个CSJS中,但自上次在服务器上重新计算SSJS并传递给浏览器后,它不会更新值。
您无法通过CSJS(客户端JS)更新viewScope变量,因为viewScope变量仅保留在服务器上。它是服务器端Map,而不是客户端浏览器cookie。因此,它只能通过服务器端代码或运行服务器端代码的帖子进行更新。
如果您想要使用来自CSJS的内容更新viewScope变量,则需要使用该值更新隐藏输入,将该隐藏输入绑定到viewScope变量并运行部分刷新以发布内容隐藏的服务器输入。如果它在页面的其他位置,只需使用SSJS访问组件/数据源并避免使用CSJS,但不清楚您的用例是什么。