Как передать параметр в службу отдыха в Xpages - PullRequest
0 голосов
/ 18 сентября 2018

Сетка данных XPages Dojo и пользовательская служба REST

*** Примечание. У меня приложение XPINC!Мне удалось заставить работать описанный выше метод, но я хочу передать параметр в Службу отдыха, чтобы создать лучший возвращаемый набор.

В приведенном выше примере сценарий выглядит следующим образом:

 <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 для хранения para1 и para2, взятых из paramValues ​​URL.

IЯ думал, что простой requestScope будет хранить их, чтобы я мог подобрать их при вызове «CURRENT_PAGE_NAME_HERE.xsp / gridData».Однако служба отдыха вызывается в событии «onClientLoad» на странице, и переменные области видимости в настоящее время недоступны.

Метод 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 голосов
/ 21 сентября 2018

Поскольку это приложение XPINC, я чувствовал, что было безопасно просто использовать переменную среды.

На кнопке действия вида, вызывающей XPage, я записываю переменную среды в систему.Затем, когда я открываю Xpage в клиенте, Служба Отдыха зашито:LOL

0 голосов
/ 19 сентября 2018

Дан,

Возможно, вам нужно проверить пару вещей.

  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>

Если это не сработает, тогда я предлагаю создать блок скрипта в начале вашей страницы с помощью простого маленького метода "getter" для каждой переменной (или всей аргументной строки) изатем используйте SSJS там.

Удачного кодирования!

/ John

...