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