gpt4 book ai didi

java - Wicket 动态 ListView - 默认项目不会通过 Ajax 更新

转载 作者:行者123 更新时间:2023-12-02 11:08:37 25 4
gpt4 key购买 nike

我有一个 ListView,从显示一个项目开始,我在其中附加每个新项目与 AjaxSubmitLink,效果很好。在 ListView 内部,我有两个 DropDownChoices,第一个通过 AjaxFormComponentUpdatingBehavior 触发第二个的选择。这也有效,但前提是我将另一个项目添加到默认项目中。如果未单击 AjaxSubmitLink,则第二个 DropDownChoice 不会更新,并且在 Ajax 调试窗口中将显示一个空白,而不是第一个 DropDownChoice 的 id。

这是我的代码:

final MarkupContainer devicescontainer = new WebMarkupContainer("devicesContainer");
devicescontainer.setOutputMarkupId(true);
add(devicescontainer);
final ListView devicesListView = new ListView<Device>("devices", devices) {

@Override
protected void populateItem(ListItem<Device> item) {
item.setModel(new CompoundPropertyModel<Device>(item.getModel()));
final List<Device.DeviceCategory> cats = Arrays.asList(Device.DeviceCategory.values());
final DropDownChoice<Device.DeviceCategory> categoryDropDownChoice = new DropDownChoice<Device.DeviceCategory>("deviceCategory", cats);
final DropDownChoice<Device.DeviceSubcategory> subcategoryDropDownChoice = new DropDownChoice<>("deviceSubcategory");
categoryDropDownChoice.setOutputMarkupId(true);
subcategoryDropDownChoice.setOutputMarkupId(true);

categoryDropDownChoice.add(new AjaxFormComponentUpdatingBehavior("change") {
@Override
protected void onUpdate(AjaxRequestTarget target) {
List<Device.DeviceSubcategory> subcats = Device.getPotentialSubcategories(categoryDropDownChoice.getModelObject());
subcategoryDropDownChoice.setChoices(subcats);
target.add(subcategoryDropDownChoice);
}});
item.add(categoryDropDownChoice);
item.add(subcategoryDropDownChoice);
}
}.setReuseItems(true);
devicescontainer.add(devicesListView);

AjaxSubmitLink addDeviceLink = new AjaxSubmitLink("addDevice") {

@Override
public void onSubmit(AjaxRequestTarget target, Form form) {

devicesListView.getModelObject().add(new Device(newId));
if (target != null){
target.add(devicescontainer);
}
}
};
addDeviceLink.setDefaultFormProcessing(false);
devicescontainer.add(addDeviceLink);

如何在不先单击“添加设备”链接的情况下让 Ajax 支持的 DropDownChoice 工作?

编辑:所有元素生成的 id 都是完整且唯一的。 ListView 项目没有 id,即使有也无济于事。

最佳答案

我已将您的代码发布到 Wicket 示例页面中,并且它立即生效。

请检查您的标记,这对我来说效果很好:

<form wicket:id="form">
<div wicket:id="devicesContainer">
<div wicket:id="devices">
<select wicket:id="deviceCategory"/>
<select wicket:id="deviceSubcategory"/>
</div>
<a wicket:id="addDevice">+</a>
</div>
</form>

关于java - Wicket 动态 ListView - 默认项目不会通过 Ajax 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50745476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com