【问题标题】:xPages REST Service Results into Combobox or Typeahead Text FieldxPages REST 服务结果到 Combobox 或 Typeahead 文本字段中
【发布时间】:2017-11-03 18:56:41
【问题描述】:

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

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

我可以看到从按钮或 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 导入数据之前的方式。

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

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

【问题讨论】:

  • 到目前为止您尝试过什么?可以发一下吗?
  • 我会推荐使用像Select2这样的插件。它具有从休息服务加载数据的内置功能。此处示例:bootstrap4xpages.com/bs4xp/demos.nsf/select2.xsp
  • 马克,我正在尝试使用它,因为你是对的,它听起来确实是一个可行的选择。我正在使用 select2 版本 4 并遵循 Johnny Oldenburger 的设置。我还是很迷茫。我收到 SyntaxError: missing : after property id[Learn More] Application.xsp:399:16 ,这是我返回一些数据的行。我会把代码放在我原来的帖子里。

标签: rest combobox xpages typeahead


【解决方案1】:

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

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

您也许可以直接跳转到填充 arrayList,但我记得我需要利用 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;
    }

【讨论】:

  • 对不起,布赖恩 - 这比我理解的要深。我只想从另一个 Domino 应用程序的视图中获取数据并将其显示在字段中。我知道 XPages REST 服务是最好的方法。我不明白我是只能返回我想要的字段还是必须返回全部数据。然后 Mark 很有帮助地建议了 Select2,我对此一无所知,我正在努力解决这个问题。您对建议您的 Java 代码很有帮助,但是我不知道如何使用 Java(我的错)而且我越来越困惑。没有简单的方法吗?
  • 我没有使用 SSJS 开发自己的东西,因为我喜欢 Java,但这里 dominoguru.com/page.xsp?id=POST-DOMO-AQ3MF5.html Chris Toohey 喜欢。在他关于“类型”的部分中,您可以看到添加不同的键和值。我认为您遇到的问题是您返回的不是 Select 或 Select2 期望作为选项进入的内容。上面说了,可以看到REST服务执行了,
  • 但它不适用于选择。因此,您需要将 SelectItems 放到该字段中,以便您选择它们​​。但是,如果此数据在 Notes 数据库中,则不需要 REST 服务。查看@DBColumn 以从您的其他数据库中的视图中获取值,从而通过更少的流程将其泵入以获得您想要的结果。
  • 我不能使用@DbColumn,因为返回的项目数量超出了限制。这就是我尝试使用 REST 服务的原因。我会看看 Chris Toohey 的帖子,看看我是否能更多地了解如何完成这项工作。
【解决方案2】:

我最终直接使用了 SSJS。像魅力一样工作 - 非常简单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多