xPages REST Service Результаты в поле со списком или текстовое поле Typeahead

Я прочитал всю документацию, которую смог найти, и посмотрел все видео, которые смог найти, и не понимаю, как это сделать. Я настроил службу REST xPages, и она работает хорошо. Теперь я хочу поместить результаты службы либо в поле со списком, либо в текстовое поле с вводом текста. В идеале я хотел бы знать, как это сделать для обоих типов полей.

У меня есть приложение, в котором есть представление, содержащее список стран, другое представление, содержащее список штатов, и другое, содержащее список городов. Я хотел бы, чтобы первое поле отображало только поле страны из списка данных, которые оно возвращает в службе REST XPages. Затем, в зависимости от того, какая страна была выбрана, я хотел бы, чтобы штаты для этой страны были перечислены в другом поле для выбора и т. д.

Я вижу код для вызова результатов службы REST с помощью кнопки или из сетки додзё, но не могу найти, как вызвать его для заполнения любого из указанных выше типов полей.

Куда мне обратиться в службу поддержки на местах? Я думал, что это будет в области данных, но, возможно, я просто не нашел правильный синтаксис для использования.

6 ноября 2017 г.:

Я следил за вашим предложением, но все еще теряюсь, как может быть. Вот что у меня сейчас есть в моем коде:

x$( "#{id:ApplCountry}" ).select2({
                        placeholder: "select a country",
                        minimumInputLength: 2,
                        allowClear : true,
                        multiple: false,
                        ajax: {
                            dataType: 'text/plain',
                            url: "./Application.xsp/gridData",
                            quietMillis: 250,
                        data: function (params) { 
                            return {  
                                search:'[name=]*'+params.term+'*',       
                                page: params.page
                            };
                        },
                        processResults: function (data, page) {
                            var data = $.map(data, function (obj) {
                            obj.id = obj.id || obj["@entityid"];
                            obj.text = obj.text || obj.name;
                            return obj;
                        });
                        },

            return {results: data};
        }
      }
});

Я использую тип данных 'text/plain', потому что я понял, что это то, что я должен использовать при сборе данных из приложения домино. Я попытался изменить это на json, но это не имеет значения.

Я использую processResults, потому что понимаю, что это то, что следует использовать в версии 4 select2.

Я не понимаю всего использования скрытого поля, поэтому я держался подальше от этого.

Независимо от того, что я делаю, хотя моя служба REST работает, если я помещаю ее непосредственно в URL-адрес, я не могу получить какие-либо данные для отображения в поле. Все, что я хочу отобразить в поле, - это код страны документа, который находится в поле с именем «имя» (это не мой выбор, это то, как это было до того, как я импортировал данные из MySQL.

Я читал документацию и смотрел видео, но до сих пор не очень понимаю, как все совмещается. Это была моя проблема с сервисом REST. Если вы используете его в Dojo, вы просто помещаете имя службы в поле элемента Dojo, и все готово, поэтому я не понимаю, зачем все это дополнительное кодирование для другого типа элемента домино. Разве это не должно работать так же?

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


person Community    schedule 03.11.2017    source источник
comment
что ты уже испробовал? Можете ли вы опубликовать это, пожалуйста?   -  person bajji    schedule 03.11.2017
comment
Я бы порекомендовал использовать плагин, такой как Select2. Он имеет встроенную функцию для загрузки данных из службы отдыха. Пример здесь: bootstrap4xpages.com/bs4xp/demos.nsf/select2.xsp   -  person Mark Leusink    schedule 04.11.2017
comment
Марк, я пытаюсь использовать это, так как ты прав, это звучит как жизнеспособная альтернатива. Я использую select2 версии 4 и следил за установкой для этого от Джонни Олденбургера. Я все еще очень потерян. Я получаю сообщение SyntaxError:missing : после свойства id[Подробнее] Application.xsp:399:16, и это строка, в которой я возвращаю некоторые данные. Я помещу код в свой исходный пост.   -  person    schedule 06.11.2017


Ответы (2)


Я думаю, проблема может заключаться в том, что вы не возвращаете SelectItems в свой select2, и это то, что он ожидает. Когда я делаю что-то похожее на то, что вы пытаетесь сделать, я фактически использую bean-компонент для создания вариантов выбора. Вы можете попробовать это, или я помещаю рабочую часть моего компонента ниже.

Utils.getItemValueAsString — это метод, который я использую для возврата либо строкового значения поля, либо, если его нет в документе/пусто/нуль, пустой строки. Я взял, если это не относится к этому, так что это несоответствие, но я надеюсь, что нет.

Возможно, вы сможете сразу перейти к заполнению массиваList, но, насколько я помню, мне нужно было для чего-то использовать LinkedHashMap.

Вы должны иметь возможность сделать то же самое с помощью SSJS, но, поскольку перед выполнением он преобразуется в Java, я считаю это более эффективным.

Для пар метка/значение:

LinkedHashMap lhmap = new LinkedHashMap();

Document doc = null;
            Document tmpDoc = null;
            allObjects.addElement(doc);
            if (dc.getCount() > 0) {
                doc = dc.getFirstDocument();
                while (doc != null) {

                        lhmap.put(Utils.getItemValueAsString(doc, LabelField, true), Utils.getItemValueAsString(doc, ValueField, true));
                    } 

                    tmpDoc = dc.getNextDocument(doc);
                    doc.recycle();
                    doc = tmpDoc;
                }

            }


List<SelectItem> options = new ArrayList<SelectItem>();
        Set set = lhmap.entrySet();
        Iterator hsItr = set.iterator();
        while (hsItr.hasNext()) {
            Map.Entry me = (Map.Entry) hsItr.next();
            // System.out.println("after: " + hStr);
            SelectItem option = new SelectItem();

            option.setLabel(me.getKey() + "");
            option.setValue(me.getValue() + "");
            options.add(option);
        }
        System.out.println("About to return from generating");
        return options;
    }
person Brian M Moore    schedule 15.11.2017
comment
Прости, Брайан, это становится глубже, чем я понимаю. Я просто хочу получить данные из представления в другом приложении Domino и отобразить их в поле. Я понял, что служба XPages REST была лучшим способом сделать это. Я не понимаю, могу ли я вернуть только нужные поля или должен вернуть весь объем данных. Затем Марк был достаточно полезен, чтобы предложить Select2, о котором я ничего не знаю, и я пытаюсь понять это. Вы помогаете, предлагая свой код Java, однако я не знаю, как использовать Java (мой плохой), и я все больше и больше запутываюсь. Разве нет простого способа сделать это? - person ; 21.11.2017
comment
Я не разрабатывал свой собственный с помощью SSJS, так как мне нравится Java, но здесь dominoguru.com/page.xsp?id=POST-DOMO-AQ3MF5.html Крис Тухи знает. В его разделе о типе вы можете увидеть добавление различных ключей и значений. Я думаю, что проблема, с которой вы столкнулись, заключается в том, что вы возвращаете не то, что Select или Select2 ожидают получить в качестве параметров. Как вы сказали выше, вы можете видеть, что служба REST выполняется, - person Brian M Moore; 25.11.2017
comment
но это не будет работать с выбором. Поэтому вам нужно получить SelectItems в поле, чтобы вы могли выбрать их. Но если эти данные находятся в базе данных Notes, вам не нужна служба REST. Взгляните на @DBColumn, чтобы получить значения из представления в другой вашей базе данных, которая прокачивает его через гораздо меньше процессов, чтобы получить желаемый результат. - person Brian M Moore; 25.11.2017
comment
Я не могу использовать @DbColumn, потому что количество возвращаемых элементов превышает лимит. Вот почему я пытаюсь использовать службу REST. Я посмотрю на сообщение Криса Тухи и посмотрю, смогу ли я понять больше о том, как заставить это работать. - person ; 28.11.2017

Я закончил тем, что использовал прямой SSJS. Работал как шарм - очень просто.

person Community    schedule 11.12.2017