Wicket:ListView 中的下拉选项不会附加 onClick 行为

And*_*den 2 java ajax wicket wicket-6

基本问题描述:我正在尝试构建一个ListView(表),它动态添加行。表中的每一行都包含一个DropDownChoice,并附有“onchange”Ajax 行为。

我所看到的:DropDownChoice表中的第一个行为正确。添加到表中的任何其他内容都不会触发onUpdate我的 Java 代码中的方法。

我检查了 HTML,发生这种情况是因为只有DropDownChoice表中的第一个onchange附加了处理程序。

这是我的表创建方法:-

    private WebMarkupContainer createCommandTable() {

    commandTable = new WebMarkupContainer("commandTable");

    commandView = new ListView<CommandModel>("commandRow", new PropertyModel<List<CommandModel>>(this, "commandListModels")) {
        private static final long serialVersionUID = 6376139649874160166L;

        @Override
        protected void populateItem(ListItem<CommandModel> item) {
            final CommandModel model = item.getModelObject();

            item.add(createCommandDropdown(model));
            item.add(createParameterTable(model));
            item.add(createDeleteLink(model));
        }

    };

    commandTable.add(commandView);
    commandTable.setOutputMarkupId(true);

    return commandTable;
}
Run Code Online (Sandbox Code Playgroud)

这是我的DropDownChoice创作方法:-

    private DropDownChoice<Root.Command> createCommandDropdown(CommandModel model) {

    IChoiceRenderer<Command> renderer = new ChoiceRenderer<Command>("name");

    DropDownChoice<Root.Command> commandDropdown = new DropDownChoice<Root.Command>("commands", new PropertyModel<Root.Command>(model, "selectedCommand"), root.getCommand(), renderer); 


    commandDropdown.add( new AjaxFormComponentUpdatingBehavior( "onchange" ) {

        private static final long serialVersionUID = -7424498013668780417L;

        @Override
        protected void onUpdate( AjaxRequestTarget target ) {
            target.add(commandTable);
        }
    } );    

    commandDropdown.setNullValid(false);
    commandDropdown.setOutputMarkupId(true);

    return commandDropdown;
}
Run Code Online (Sandbox Code Playgroud)

这是我的浏览器检查器的屏幕截图。onchange您可以看到第二项没有事件处理程序ListView。但是我注意到第一个项目有两个事件处理程序ListView。事实上,我刚刚添加了另一行,第一行的下拉列表添加了另一个更改事件处理程序。为什么事件处理程序没有附加到正确的下拉列表?

在此输入图像描述

Buu*_*man 5

我注意到两个 <select> 具有相同的 id 但名称不同。难道 onchange 处理程序会附加到 id,因此仅适用于第一个组件?

一般来说,不要在 HTML 中指定 id 属性,让 wicket 处理它,因为它确保 id 是唯一的。