【问题标题】:How to pass a parameter through to a Rest Service in Xpages如何将参数传递给 Xpages 中的 Rest 服务
【发布时间】:2018-09-18 14:08:52
【问题描述】:

XPages Dojo Data Grid and Custom REST Service

*** 注意:我的是一个 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”事件来创建 Scope 变量来保存从 URL 的 paramValues 获取的 para1 和 para2。

我认为一个简单的 requestScope 会存储它们,这样我就可以在调用“CURRENT_PAGE_NAME_HERE.xsp/gridData”时获取它们。但是,在页面的“onClientLoad”事件中调用了 Rest Service,此时 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>

这行得通!但是,仅适用于苹果和橙子

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

如有任何帮助或指导,我们将不胜感激。

【问题讨论】:

    标签: rest datagrid xpages


    【解决方案1】:

    丹,

    您可能需要检查几件事。

    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。

    编码愉快!

    /约翰

    【讨论】:

    • 您好约翰,感谢您的帮助。我会玩弄你的建议。我需要更仔细地看一下“$”和“#”之间的区别。我刚刚从网上剪切和粘贴以使其正常工作。我对 Rest Services 做的不多。再次感谢您的帮助。
    【解决方案2】:

    由于这是一个 XPINC 应用程序,我觉得只使用环境变量是安全的。

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

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

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

    【讨论】:

    • 啊,我错过了它是一个 XPinc 应用程序 - 我没有太多经验。但是,您需要了解 '#' 和 '$' 之间的区别 - 正是由于这个原因,您永远不会像使用 '$' 所示那样工作;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多