Discussions
Categories
- 196.9K All Categories
- 2.2K Data
- 239 Big Data Appliance
- 1.9K Data Science
- 450.3K Databases
- 221.7K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 31 Multilingual Engine
- 550 MySQL Community Space
- 478 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3K ORDS, SODA & JSON in the Database
- 545 SQLcl
- 4K SQL Developer Data Modeler
- 187K SQL & PL/SQL
- 21.3K SQL Developer
- 295.9K Development
- 17 Developer Projects
- 138 Programming Languages
- 292.6K Development Tools
- 107 DevOps
- 3.1K QA/Testing
- 646K Java
- 28 Java Learning Subscription
- 37K Database Connectivity
- 155 Java Community Process
- 105 Java 25
- 22.1K Java APIs
- 138.1K Java Development Tools
- 165.3K Java EE (Java Enterprise Edition)
- 18 Java Essentials
- 160 Java 8 Questions
- 86K Java Programming
- 80 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 204 Java User Groups
- 24 JavaScript - Nashorn
- Programs
- 440 LiveLabs
- 38 Workshops
- 10.2K Software
- 6.7K Berkeley DB Family
- 3.5K JHeadstart
- 5.7K Other Languages
- 2.3K Chinese
- 171 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 232 Portuguese
oj-combobox with RESTDataProvider: options are displayed mulitiple times

Hello everybody!
I try to use the new RESTDataProvider to feed the options of oj-combobox.
The desired output are seven keywords, but what happens is that the options (keywords) are displayed multiple times.
I have no idea how to control this behaviour. Is there anyone who has an idea what´s going wrong?
** HTML **
<oj-combobox-many id="keywordsDropDown"
value-options="{{selectedKeywords}}"
options="[[keywordRestDataProvider]]"
options-keys.value="id"
options-keys.label="text">
</oj-combobox-many>
**Typescript**
const optionsKeywordsDataProvider = {
url: self.keywordsURL,
keyAttributes: "id",
transforms: {
fetchFirst: {
request: async (options) => {
const url = new URL(options.url);
return new Request(url.href); },
response: async ({ body }) => {
const keywords = self.parseKeywordsResponseBody(body);
return { data : keywords };
} } } };
self.keywordRestDataProvider = new RESTDataProvider(optionsKeywordsDataProvider);
parseKeywordsResponseBody = (body) => {
var result = [];
if ((body._embedded != null) && (body._embedded.keywords != null)) {
result = body._embedded.keywords; }
return result; };
Answers
-
Usually when we see this kind of thing, the field used for keyAttributes, is not unique. It must be. The value for keyAttributes should be your unique id for that request.
-
Thank you for your answer.
I checked on the "id" used for the keyAttributes and it is unique.
I tried the keywordRestDataProvider (with configuration as above) with the oj-list-view and here the keywords are displayed correctly.
I am puzzled. Has anyone an idea?
-
can you share a snippet / example of the JSON that is returned from your REST service? Don't place any private or proprietary data please.
I'll see if I can reproduce this locally.
-
I will also add my usual question when I see people using oj-combobox. Do you really need to use combobox? This is a component with a very specific use case. It allows a use to type in an arbitrary value and the application can do something with that value. It's not just for selecting from a list. If you don't need this arbitrary entry functionality, you may be better off using an oj-select-single component.
-
Dear JB,
attached you find the result of the parseKeywordsResponseBody function in parseKeyword.json. The file contains dummy data, so there are no privacy concerns. As .json files cannot be uploaded it is a .txt.
I also tried with oj-select-many as I need the mulitselect function and the RESTDataProvider, unfortunately with the same result: options are displayed multiple times.
Additionally I tried with local data (parseKeyword.json) and the ArrayDataProvider. In this case everything works as desired... Maybe you know what goes wrong here.
**typescript**
self.keywordArrayDataProvider = new ArrayDataProvider<KeywordKey,Keyword>(JSON.parse(keywordData), { keyAttributes: "id" });
**html**
<oj-combobox-many id="keywordsDropDownLocal" value-options="{{selectedKeywords}}"
options="{{keywordArrayDataProvider}}" options-keys.value="id" options-keys.label="text">
</oj-combobox-many>
<oj-select-many id="keywordsDropDownSelectManyLocal" value-options="{{selectedKeywords}}"
options="{{keywordArrayDataProvider}}" options-keys.value="id" options-keys.label="text">
</oj-select-many>
Thank you very much for your help and support.