如何在Xpages中将参数传递给Rest服务

时间:2018-09-18 14:08:52

标签: rest datagrid xpages

XPages Dojo Data Grid and Custom REST Service

***注意:Mine是XPINC应用程序! 我设法使上述方法起作用,但我想将参数传递给Rest Service,以建立更好的返回集。

在上面的示例中,脚本如下所示:

 <script>
   var jsonStore = new dojo.store.JsonRest(
     {target:"CURRENT_PAGE_NAME_HERE.xsp/gridData"}
   ); 
   var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
 </script>

但是,我想做这样的事情:

 <script>
   var jsonStore = new dojo.store.JsonRest(
     {target:"CURRENT_PAGE_NAME_HERE.xsp/gridData?OpenXpage&para1=Value1&para2=Value2"}
   ); 
   var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
 </script>

我尝试了许多方法,但没有成功。

方法1-使用Request / View / SessionScope变量 在“ CURRENT_PAGE_NAME_HERE.xsp”上,添加了一个“ xp:this.beforePageLoad”事件以创建范围变量,以保存从URL的paramValues中获取的para1和para2。

我认为一个简单的requestScope可以存储它们,以便在调用“ CURRENT_PAGE_NAME_HERE.xsp / gridData”时可以将它们拾取。但是,在页面的“ onClientLoad”事件中调用了Rest服务,并且Scope变量目前似乎不可用。

方法2-内联Javascript 我还尝试了“ $ {javascript:viewScope.para1;}”将其传递给以下用户:

 <script>
   var jsonStore = new dojo.store.JsonRest(
     {target:"CURRENT_PAGE_NAME_HERE.xsp/gridData?OpenXpage&para1=${javascript:viewScope.para1;}&para2=${javascript:viewScope.para2;}"}
   ); 
   var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
 </script>

这行不通。

方法3-硬编码 我已经硬编码了这些值。

 <script>
    var jsonStore = new dojo.store.JsonRest(
      {target:"CURRENT_PAGE_NAME_HERE.xsp/gridData?OpenXpage&para1=Apples&para2=Oringes"}
    ); 
    var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
 </script>

这有效!但是,仅适用于苹果和橘子

我开始考虑使用环境变量来传递值,但这似乎更像是一种技巧,而不是解决方案。

任何帮助或指导都将适用。

2 个答案:

答案 0 :(得分:0)

丹,

您可能需要检查几件事。

  1. 第一件事是,您需要使用#而不是$来避免 计算页面加载时的表达式

  2. 在某些情况下,您不能将SSJS注入CSJS中-如果在页面加载时对此进行了“评估”。您可能会遇到这个问题。     检查的方法是创建几个局部变量并分配     SSJS中的值。这样可以轻松在浏览器中进行调试。

我想您可以执行类似的操作(然后您可以在浏览器中设置一个断点,并查看值是否符合预期)。

 <script>
   var p1 = "#{javascript:viewScope.para1;}";
   var p2 = "#{javascript:viewScope.para2;}";
   var jsonStore = new dojo.store.JsonRest(
     {target:"CURRENT_PAGE_NAME_HERE.xsp/gridData?OpenXpage&para1=" + p1 + "&para2=" + p2}
   ); 
   var dataStore = dojo.data.ObjectStore({objectStore: jsonStore});
 </script>

如果这不起作用,那么我建议在页面的开头创建一个脚本块,为每个变量(或整个arg。字符串)使用一个简单的小“ getter”方法,然后在其中使用SSJS。

编码愉快!

/ John

答案 1 :(得分:0)

由于这是XPINC应用程序,所以我觉得仅使用环境变量是安全的。

在调用XPage的视图操作按钮上,我将Environment变量写到系统上。然后,当我在客户端中打开Xpage时,Rest Service被硬连线到:

 var param1:String = session.getEnvironmentString("Param!");

我仍然认为这更像是一种破解,但是有了Notes,我已经习惯了。哈哈