Как получить доступ к повторяющимся значениям в простом поле со списком в ExtJS

#java #gwt #extjs #combobox #gxt

#java #gwt #extjs #поле со списком #gxt

Вопрос:

У меня есть SimpleComboBox в графическом интерфейсе, который также содержит некоторые повторяющиеся элементы. Предположим, что есть 3 элемента, которые совпадают с «доменом». Когда я выбираю второй «домен» или третий «домен», выбранный элемент и выбранный индекс всегда указывают на первое появление «домена». Как я могу исправить, чтобы выбранный индекс / элемент был правильным, а не первым появлением элемента?

Поле со списком с повторяющимися значениями:

Поле со списком с повторяющимися значениями

Когда я выбираю «домен» в четвертом появлении, он всегда будет указывать на первое появление «домена».

Вывод:

введите описание изображения здесь

Когда я выбираю «192.168.1.30» в последнем случае, это укажет на первое появление «192.168.1.30».

Пожалуйста, кто-нибудь мне поможет.

 private SimpleComboBox<String> domainName = new SimpleComboBox<String>();
domainName = WidgetUtil.getStringCombo("Domain Name", 12, true, domainNameList, null);
        domainName.addSelectionChangedListener(getReportSelectionListener());
        domainName.setForceSelection(true);
        domainName.setTriggerAction(TriggerAction.ALL);
 private Button New, add, remove;
 New = WidgetUtil.getButton("New", "new", "");
    New.addSelectionListener(buttonAction());
    thirdLayoutContainer.add(New);
    add = WidgetUtil.getButton("Add", "add", "");
    add.addSelectionListener(buttonAction());
    add.setStyleAttribute("paddingTop", "10px");
    thirdLayoutContainer.add(add, formData);
    remove = WidgetUtil.getButton("Remove", "remove", "");
    remove.addSelectionListener(buttonAction());

 public void componentSelected(ButtonEvent ce){
            String domain_name = null;
            if (ce.getComponent().getId().equals("remove")){
                System.err.println("Clicked remove button...");
                domain_name = domainName.getRawValue();
                domainNameList.remove(domain_name);
                systemDetailsMap.remove(domain_name);
                systemDetailsMap.remove(domain_name   "_USER_NAME");
                systemDetailsMap.remove(domain_name   "_HOST_NAME");
                systemDetailsMap.remove(domain_name   "_PASSWORD");
                domainName.removeAll();
                domainName.add(domainNameList);
                userName.clear();
                hostName.clear();
                password.clear();
                System.err.println("After remove domain name list ---> "   domainNameList);
                System.err.println("After remove map ---> "   systemDetailsMap);
            } else if (ce.getComponent().getId().equals("add")) {
                System.err.println("Clicked add button...");
                domain_name = domainName.getRawValue();
                domainNameList.add(domain_name);
                systemDetailsMap.put(domain_name, domain_name);
                systemDetailsMap.put(domain_name   "_HOST_NAME", hostName.getValue());
                systemDetailsMap.put(domain_name   "_USER_NAME", userName.getValue());
                systemDetailsMap.put(domain_name   "_PASSWORD", password.getValue());
 //                 domainName.clear();
                domainName.add(domainNameList);
 //                 domainName.reset();
                System.err.println("After add domain name list ---> "   domainNameList);
                System.err.println("After add map ---> "   systemDetailsMap);
            } else if (ce.getComponent().getId().equals("new")) {
                System.err.println("Clicked new button...");
                userName.clear();
                hostName.clear();
                password.clear();
                domainName.removeAllListeners();
                domainName.removeAll();
                domainName.clear();
                domainName.setEmptyText("Add a new domain");
                userName.setEmptyText("Add a new username");
                hostName.setEmptyText("Add a new hostname");
                password.setEmptyText("Add a new password");
                domainName.addSelectionChangedListener(getReportSelectionListener());
            }
        }
        };


 private SelectionChangedListener<SimpleComboValue<String>> getReportSelectionListener(){
    SelectionChangedListener<SimpleComboValue<String>> ReportListener = new SelectionChangedListener<SimpleComboValue<String>>() {
        @Override
        public void selectionChanged(SelectionChangedEvent<SimpleComboValue<String>> se) {
            SimpleComboValue<String> selectedValue = se.getSelectedItem();
            String value = selectedValue.getValue();
            System.err.println("Selected Value ---> "   selectedValue.getValue());
            if (value != null amp;amp; !value.equals("---New---") ){
                userName.clear();
                hostName.clear();
                password.clear();
                userName.setValue(systemDetailsMap.get(value   "_USER_NAME").toString());
                hostName.setValue(systemDetailsMap.get(value   "_HOST_NAME").toString());
                password.setValue(systemDetailsMap.get(value   "_PASSWORD").toString());
            } 
        }
    };
    return ReportListener;
}
  

Пожалуйста, помогите мне. Заранее спасибо.

Ответ №1:

Я не использую Ext-gwt, только стандартный ext-js, но я думаю, что знаю, что вам нужно! Вы должны определить поле отображения и значения.

 Ext.create('Ext.form.ComboBox', {
    store: xyz,
    queryMode: 'local',
    displayField: 'name',
    valueField: 'id',
    renderTo: Ext.getBody()
});
  

Вам просто нужно убедиться, что дублирующиеся элементы получают уникальный идентификатор. Я думаю, что если это возможно в ext-js, это также должно быть возможно в ext-gwt!