Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
XPages-设置viewScope值的客户端代码?_Xpages - Fatal编程技术网

XPages-设置viewScope值的客户端代码?

XPages-设置viewScope值的客户端代码?,xpages,Xpages,我有一个按钮,点击该按钮,我有客户端代码来设置viewScope值: var val = 'TEST_VALUE'; "#{javascript: viewScope.testVal = " + val + "}" 在该按钮的服务器端,我尝试获取viewScope值: print("ViewScope val " + viewScope.testVal); 当呈现页面并用结果替换SSJS时,将在服务器上计算CSJS中的变量名而不是变量值,变量名存储在ViewScopeSSJS中。

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

  var val = 'TEST_VALUE';
  "#{javascript: viewScope.testVal = " + val + "}" 
在该按钮的服务器端,我尝试获取viewScope值:

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

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

无法通过CSJS(客户端JS)更新viewScope变量,因为viewScope变量仅保存在服务器上。它是服务器端映射,而不是客户端浏览器cookie。因此,它只能通过服务器端代码或运行服务器端代码的post进行更新


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

您不能将ServerSideVariable设置为易于签出:这是JSON-RPC组件设计的用例类型:让浏览器告诉服务器做一些事情,无需发布整个表单并触发部分/完全刷新的所有开销。感谢大家的回答。Paul:我有一个疑问,正如你所说的“你不能通过CSJS更新viewScope变量”,但如果我这样做35;{javascript:var val='TEST\u val';viewScope.put('testVal',val)}在客户端,并保持按钮的服务器选项为no update,那么我可以更新viewScope变量,问题是,如果我将服务器选项设置为“完全更新”或“部分更新”,则会引发客户端错误。如果确实设置了viewScope变量,我不会感到惊讶,但我想知道它何时设置viewScope变量。我的理解是,它将在评估SSJS时设置,因此在页面呈现给用户之前将CSJS写入浏览器时,而不是在单击按钮时设置。这也与它在不更新的情况下工作相关。@PaulStephenWithers请查看下面的代码。如果您能解释上面的代码,将非常有帮助。您是否运行了测试并查看了此代码的HTML源代码?请查看csjsonclick函数。正如我在上一篇评论中所说,xp:this.script中的SSJS是在加载页面时计算的,结果“@none”传递给浏览器。正如我所说,您不能在浏览器中运行SSJS。单击该按钮时,会发布帖子,但不会对浏览器进行任何更改,因为refreshMode=“norefresh”。print语句是在浏览器上执行的,但这只是因为它是在页面传递到浏览器之前运行的。正如Tim所说,JSON-RPC将是一种发展方向。