Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ApacheWicket:从UI上的表中获取所选下拉列表值_Wicket_Wicket 1.5_Wicketstuff - Fatal编程技术网

ApacheWicket:从UI上的表中获取所选下拉列表值

ApacheWicket:从UI上的表中获取所选下拉列表值,wicket,wicket-1.5,wicketstuff,Wicket,Wicket 1.5,Wicketstuff,我有一个类似的物体 public class Table { private String id; private String name; private List<Field> fieldsList; } public class Field { private List<Column> columnList; } public class Column{ String id; } 如何处理这种情况。请帮助…参见下面的完整

我有一个类似的物体

public class Table {
    private String id;
    private String name;
    private List<Field> fieldsList;
}

public class Field {
    private List<Column> columnList;
}

public class Column{
    String id;
}

如何处理这种情况。请帮助…

参见下面的完整示例。 主要部分是ViewModel(VM)和ViewModelLoader(VML)。 VM是您希望在UI中显示的内容。VML用数据库中的数据填充VM。 使用PropertyModel,我将绑定下拉项和选定值。 为了更新doropdown,我正在更新VM并将组件添加到AjaxRequestTarget

  public class PlayingWithDropDownPage extends WebPage {

        public PlayingWithDropDownPage() {
            final ViewModelLoader viewModelLoader = new ViewModelLoader();
            final ViewModel viewModel = viewModelLoader.load();

            IChoiceRenderer choiceRenderer = new ChoiceRenderer("name", "id");
            final DropDownChoice dropDownChoice = new DropDownChoice("dropDown");
            dropDownChoice.setChoiceRenderer(choiceRenderer);
            dropDownChoice.setChoices(viewModel.getItemsModel());
            dropDownChoice.setModel(viewModel.getSelectedModel());

            dropDownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    viewModelLoader.load(viewModel);

                    target.add(dropDownChoice);
                }
            });
            add(dropDownChoice);
        }

        public static class ViewModel implements Serializable {
            private WhatToShow whatToShow;
            private List<Item> items = new ArrayList<>();
            private Item selected;

            public IModel<List<Item>> getItemsModel() {
                return new PropertyModel<>(this, "items");
            }

            public IModel<Item> getSelectedModel() {
                return new PropertyModel<>(this, "selected");
            }
        }

        public static class ViewModelLoader extends LoadableDetachableModel<ViewModel> {

            @Override
            protected ViewModel load() {
                return load(new ViewModel());
            }

            protected ViewModel load(ViewModel vm) {
                vm.items.clear();

                if (vm.whatToShow == WhatToShow.City) {
                    vm.whatToShow = WhatToShow.Person;
                    vm.items.add(new Person("1", "John", "Smith"));
                    vm.items.add(new Person("2", "Robert", "Evans"));
                    vm.items.add(new Person("3", "Jeff", "Jones"));
                } else {
                    vm.whatToShow = WhatToShow.City;
                    vm.items.add(new City("1", "London"));
                    vm.items.add(new City("2", "Moscow"));
                    vm.items.add(new City("3", "Kiev"));
                }

                return vm;
            }
        }

        public static interface Item {
            public String getId();

            public String getName();
        }

        private enum WhatToShow {
            Person,
            City
        }

        public static class City implements Item {

            public String id;
            public String name;

            public City(String id, String name) {
                this.id = id;
                this.name = name;
            }

            @Override
            public String getId() {
                return id;
            }

            @Override
            public String getName() {
                return name;
            }
        }

        public static class Person implements Item {
            public String id;
            public String fname;
            public String lname;

            public Person(String id, String fname, String lname) {
                this.id = id;
                this.fname = fname;
                this.lname = lname;
            }

            @Override
            public String getId() {
                return id;
            }

            @Override
            public String getName() {
                return String.format("%s %s", fname, lname);
            }
        }
    }
public class PlayingWithDropDownPage扩展网页{
使用DropDownPage()进行公共播放{
最终ViewModelLoader ViewModelLoader=新的ViewModelLoader();
final ViewModel ViewModel=viewModelLoader.load();
ICHOICHERENDER CHOICERENDER=新的CHOICERENDER(“名称”、“id”);
最终下拉选择=新下拉选择(“下拉”);
下拉选择。设置ChoiceRender(ChoiceRender);
setChoices(viewModel.getItemsModel());
setModel(viewModel.getSelectedModel());
添加(新的AjaxFormComponentUpdateBehavior(“onchange”){
@凌驾
受保护的void onUpdate(AjaxRequestTarget目标){
加载(viewModel);
target.add(下拉选择);
}
});
添加(下拉选择);
}
公共静态类ViewModel实现了可序列化{
私人WhatShow WhatShow;
私有列表项=新的ArrayList();
选择私人物品;
公共IModel getItemsModel(){
返回新的PropertyModel(本“项目”);
}
公共IModel getSelectedModel(){
返回新的PropertyModel(此“选定”);
}
}
公共静态类ViewModelLoader扩展了LoadableDetachableModel{
@凌驾
受保护的ViewModel加载(){
返回加载(新ViewModel());
}
受保护的ViewModel加载(ViewModel vm){
vm.items.clear();
如果(vm.whatToShow==whatToShow.City){
vm.whatToShow=whatToShow.Person;
vm.items.add(新人物(“1”、“约翰”、“史密斯”));
vm.items.add(新人物(“2”、“罗伯特”、“埃文斯”));
添加(新人物(“3”,“杰夫”,“琼斯”));
}否则{
vm.whatToShow=whatToShow.City;
vm.items.add(新城(“1”、“伦敦”);
vm.items.add(新城(“2”、“莫斯科”);
增加(新城市(“3”、“基辅”);
}
返回虚拟机;
}
}
公共静态接口项{
公共字符串getId();
公共字符串getName();
}
私人展览{
人,
城市
}
公共静态类城市实施项目{
公共字符串id;
公共字符串名称;
公共城市(字符串id、字符串名称){
this.id=id;
this.name=名称;
}
@凌驾
公共字符串getId(){
返回id;
}
@凌驾
公共字符串getName(){
返回名称;
}
}
公共静态类Person实现项{
公共字符串id;
公共字符串fname;
公共字符串名称;
公众人物(字符串id、字符串fname、字符串lname){
this.id=id;
this.fname=fname;
this.lname=lname;
}
@凌驾
公共字符串getId(){
返回id;
}
@凌驾
公共字符串getName(){
返回字符串。格式(“%s%s”,fname,lname);
}
}
}

HI明白了,但是如何用ajax更新所选字段上的列下拉列表depanding。我会得到所选字段的相应下拉列表名称吗?非常感谢@Alexey,它帮助我找到了解决问题的方法。TanX很多…不客气,很高兴它帮助了你。请接受答案。
  public class PlayingWithDropDownPage extends WebPage {

        public PlayingWithDropDownPage() {
            final ViewModelLoader viewModelLoader = new ViewModelLoader();
            final ViewModel viewModel = viewModelLoader.load();

            IChoiceRenderer choiceRenderer = new ChoiceRenderer("name", "id");
            final DropDownChoice dropDownChoice = new DropDownChoice("dropDown");
            dropDownChoice.setChoiceRenderer(choiceRenderer);
            dropDownChoice.setChoices(viewModel.getItemsModel());
            dropDownChoice.setModel(viewModel.getSelectedModel());

            dropDownChoice.add(new AjaxFormComponentUpdatingBehavior("onchange") {
                @Override
                protected void onUpdate(AjaxRequestTarget target) {
                    viewModelLoader.load(viewModel);

                    target.add(dropDownChoice);
                }
            });
            add(dropDownChoice);
        }

        public static class ViewModel implements Serializable {
            private WhatToShow whatToShow;
            private List<Item> items = new ArrayList<>();
            private Item selected;

            public IModel<List<Item>> getItemsModel() {
                return new PropertyModel<>(this, "items");
            }

            public IModel<Item> getSelectedModel() {
                return new PropertyModel<>(this, "selected");
            }
        }

        public static class ViewModelLoader extends LoadableDetachableModel<ViewModel> {

            @Override
            protected ViewModel load() {
                return load(new ViewModel());
            }

            protected ViewModel load(ViewModel vm) {
                vm.items.clear();

                if (vm.whatToShow == WhatToShow.City) {
                    vm.whatToShow = WhatToShow.Person;
                    vm.items.add(new Person("1", "John", "Smith"));
                    vm.items.add(new Person("2", "Robert", "Evans"));
                    vm.items.add(new Person("3", "Jeff", "Jones"));
                } else {
                    vm.whatToShow = WhatToShow.City;
                    vm.items.add(new City("1", "London"));
                    vm.items.add(new City("2", "Moscow"));
                    vm.items.add(new City("3", "Kiev"));
                }

                return vm;
            }
        }

        public static interface Item {
            public String getId();

            public String getName();
        }

        private enum WhatToShow {
            Person,
            City
        }

        public static class City implements Item {

            public String id;
            public String name;

            public City(String id, String name) {
                this.id = id;
                this.name = name;
            }

            @Override
            public String getId() {
                return id;
            }

            @Override
            public String getName() {
                return name;
            }
        }

        public static class Person implements Item {
            public String id;
            public String fname;
            public String lname;

            public Person(String id, String fname, String lname) {
                this.id = id;
                this.fname = fname;
                this.lname = lname;
            }

            @Override
            public String getId() {
                return id;
            }

            @Override
            public String getName() {
                return String.format("%s %s", fname, lname);
            }
        }
    }