Vaadin - Несколько связанных Combo box в ленточной форме

 
 
 
Сообщения:1
Доброго времени суток! У меня в базе имеется 4 таблица: Филиал(Branch), Подразделения(subdivision), Отдел(department) и Сектор(section). И эти таблицы заполнены с данными. Теперь не могу делать несколько связанных Combo Box, чтоб при выборе значения в главном списке менялись выпадающие значения в другом. Ниже приведен код:

private FormLayout createTabFilesLayout() {
FormLayout tabLayout = new FormLayout();
HorizontalLayout hLayout = new HorizontalLayout();
hLayout.setWidth("-1px");
hLayout.setHeight("-1px");
hLayout.setSpacing(true);
cBoxBranch = new ComboBox();
cBoxBranch.setInputPrompt("Филиал");
cBoxBranch.setWidth("250px");
cBoxBranch.setHeight("33px");
cBoxBranch.setImmediate(true);
cBoxBranch.setNullSelectionAllowed(false);
cBoxBranch.setInvalidAllowed(false);
Iterator<Branch> bran = branch.iterator();
while(bran.hasNext()) {
Branch rt = bran.next();
cBoxBranch.addItem(rt);
cBoxBranch.setItemCaption(rt, rt.getBranch_name().trim());
if (applicationForm.getId() != null) {
if (rt.getId_branch().equals(applicationForm.getRecords().getId_branch().getId_branch()))
{
applicationForm.getRecords().setId_branch(rt);
}
}
}
hLayout.addComponent(cBoxBranch);
binder.bind(cBoxBranch, "id_branch");
tabLayout.addComponent(hLayout);

cBoxSubdivision = new ComboBox();
cBoxSubdivision.setInputPrompt("Подразделения");
cBoxSubdivision.setWidth("250px");
cBoxSubdivision.setHeight("33px");
cBoxSubdivision.setImmediate(true);
cBoxSubdivision.setNullSelectionAllowed(false);
cBoxSubdivision.setInvalidAllowed(false);
Iterator<Subdivision> sub = subdivisions.iterator();
while (sub.hasNext()) {
Subdivision rt = sub.next();
cBoxSubdivision.addItem(rt);
cBoxSubdivision.setItemCaption(rt, rt.getSubdivision().trim());;
if (applicationForm.getId() != null) {
if(rt.getId_subdivision().equals(applicationForm.getRecords().getId_subdivision().getId_subdivision())) {
applicationForm.getRecords().setId_subdivision(rt);
}

}
}

hLayout1.addComponent(cBoxSubdivision);
binder.bind(cBoxSubdivision, "id_subdivision");
tabLayout.addComponent(hLayout1);

cBoxDep = new ComboBox();
cBoxDep.setInputPrompt("Отдел");
cBoxDep.setWidth("300px");
cBoxDep.setHeight("33px");
cBoxDep.setImmediate(true);
cBoxDep.setNullSelectionAllowed(false);
Iterator<Department> dep = departments.iterator();
while (dep.hasNext()) {
Department rt = dep.next();
cBoxDep.addItem(rt);
cBoxDep.setItemCaption(rt, rt.getDepartment_name().trim());
if(applicationForm.getId() != null) {
if(rt.getId_department().equals(applicationForm.getRecords().getId_department().getId_department())) {
applicationForm.getRecords().setId_department(rt);
}
}
}
hLayout2.addComponent(cBoxDep);
binder.bind(cBoxDep, "id_department");
tabLayout.addComponent(hLayout2);

cBoxSec = new ComboBox();
cBoxSec.setInputPrompt("Сектор");
cBoxSec.setWidth("300px");
cBoxSec.setHeight("33px");
cBoxSec.setImmediate(true);
cBoxSec.setNullSelectionAllowed(false);
Iterator<Section> sec = sections.iterator();
while(sec.hasNext()) {
Section rt = sec.next();
cBoxSec.addItem(rt);
cBoxSec.setItemCaption(rt, rt.getSection_name().trim());
if(applicationForm.getId()!=null) {
if(rt.getId_section().equals(applicationForm.getRecords().getId_section().getId_section())){
applicationForm.getRecords().setId_section(rt);
}
}
}
hLayout3.addComponent(cBoxSec);
binder.bind(cBoxSec, "id_section");
tabLayout.addComponent(hLayout3);

В этом случае в выпадающем окне выходят данные, но связка с другими ComboBox нет.
Далее, создал метод CreatSubdivisionList() CreatDepartmentList() CreatSectionList()

private FormLayout createTabFilesLayout() {
FormLayout tabLayout = new FormLayout();
cBoxSubdivision = new ComboBox();
cBoxSubdivision.setInputPrompt("Подразделения");
cBoxSubdivision.setWidth("250px");
cBoxSubdivision.setHeight("33px");
cBoxSubdivision.setImmediate(true);
cBoxSubdivision.setNullSelectionAllowed(false);
cBoxSubdivision.setInvalidAllowed(false);
CreatSubdivisionList();
tabLayout.addComponent(cBoxSubdivision);
binder.bind(cBoxSubdivision, "id_subdivision");
cBoxSubdivision.addListener(this);

private void CreatSubdivisionList()
{
if (applicationForm.getRecords().getId_branch()!=null)
{
subdivisions = SBranchService.getSubdivisionById(applicationForm.getRecords().getId_branch().getId_branch(), app.getDbHelper().getConnectionPool());
cBoxSubdivision.removeAllItems();
Iterator<Subdivision> subd = subdivisions.iterator();
while (subd.hasNext())
{
Subdivision rt = subd.next();
cBoxSubdivision.addItem(rt);
cBoxSubdivision.setItemCaption(rt, rt.getSubdivision().trim());
if(applicationForm.getId() !=null)
{
if (rt.getId_subdivision().equals(applicationForm.getRecords().getId_subdivision().getId_subdivision()))
{
applicationForm.getRecords().setId_subdivision(rt);
}
}
}
}
}
для других тоже аналогичный код. В таком случае в выпадающем окне пусто. (для других тоже аналогичный код. В таком случае в выпадающем окне пусто)

Мне нужно выбрать Филиал(Branch), а остальных в выпадающем списке появлялись только те подразделения - отдел и сектор которые привязаны к этой Филиале.
 
 
Сообщения:517
        ipSourceCB.addActionListener(new ActionListener()
        {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                repopulatePorts((PcapNgTrace)traceModel.getSelectedItem(), 
                                portSourceCB, 
                                (String)ipSourceCB.getSelectedItem());
            }
        });


    private void repopulatePorts(PcapNgTrace trace, JComboBox<String> comboBox, String ip)
    {
        if(comboBox == null)
            throw new NullPointerException();
        
        comboBox.removeAllItems();
        comboBox.addItem("*");
        
        if(trace == null)
            return;
        
        for (String port : trace.getPorts(ip))
        {
            comboBox.addItem(port);
        }
        
    }


примерно так.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет