xPages REST 服务结果到组合框或预输入文本字段

xPages REST Service Results into Combobox or Typeahead Text Field

我已经阅读了所有我能找到的文档并观看了所有我能找到的视频,但不明白如何做到这一点。我已经设置了一个 xPages REST 服务并且运行良好。现在我想将服务的结果放入组合框或预输入文本字段中。理想情况下,我想知道如何为这两种类型的字段执行此操作。

我有一个应用程序,其中一个视图包含国家列表,另一个视图包含州列表,另一个视图包含城市列表。我希望第一个字段仅显示 XPages REST 服务中 returns 数据列表中的国家/地区字段。然后,根据选择的国家/地区,我希望在另一个字段中列出该国家/地区的州以供选择等。

我可以看到用于从按钮或 dojo 网格调用 REST 服务结果的代码,但我找不到如何调用它来填充上述任一类型的字段。

我应该在哪里调用该字段的服务?我原以为它会放在数据区域,但也许我只是没有找到正确的语法来使用。

2017 年 11 月 6 日:

我一直在听从你的建议,但还是迷路了。这是我目前在我的代码中的内容:

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' 的数据类型,因为据我所知,从 domino 应用程序收集数据时应该使用这种类型。我试过将其更改为 json,但没有任何区别。

我正在使用 processResults,因为我知道这应该在 select2 的版本 4 中使用。

我不明白隐藏字段的全部用途,所以我远离它。

无论我做什么,尽管我的 REST 服务如果直接放在 url 中就可以工作,但我无法在字段中显示任何数据。我想在字段中显示的只是文档的国家代码,它位于名为 "name" 的字段中(不是我的选择,这是我从 MySQL.[= 导入数据之前的样子11=]

我已经阅读了文档并观看了视频,但仍然不太了解所有内容是如何组合在一起的。那是我的 REST 服务的问题。如果您在 Dojo 中使用它,您只需将服务的名称放在 Dojo 元素的一个字段中即可,所以我不明白为什么要为另一种类型的 domino 元素进行所有额外编码。它不应该以同样的方式工作吗?

我应该指出,在某些时候它确实会显示默认消息,因此它确实找到了该字段。只是不显示国家选择。

我认为问题可能是您没有 returning SelectItems 到您的 select2,而这正是它所期望的。当我做你正在尝试的事情时,我实际上使用一个 bean 来生成选择选项。您可能想尝试一下,或者我将我的 bean 的工作部分放在下面。

Utils.getItemValueAsString 是我用来 return 一个字段的字符串值,或者如果它不在 document/empty/null 上的一个空字符串的方法。我取出了一个与此无关的 if,所以我不匹配,但我希望不会。

您也许可以直接跳到填充 arrayList,但我记得我需要利用 LinkedHashMap 来做一些事情。

您应该能够使用 SSJS 执行相同的操作,但由于在执行之前呈现为 Java,我发现这更有效。

对于 label/value 对:

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;
    }

我最终直接使用了 SSJS。工作起来很有魅力 - 非常简单。