gpt4 book ai didi

java - Wicket 口:getModelObject 返回 null

转载 作者:行者123 更新时间:2023-12-04 06:34:03 25 4
gpt4 key购买 nike

我在使用 getModelObject 时遇到了麻烦。它返回空值。实际上模型概念对我来说并不清楚。代码是:

public class SpaceCheckListWindow extends WebPage {
private SpaceCheckListForm spaceCheckListForm;
private Page parentPage;
private ModalWindow modalWindow;

public SpaceCheckListWindow(Page parentPage, final ModalWindow modalWindow) {
this.parentPage = parentPage;
this.modalWindow = modalWindow;

String[] labels = new String[] {
"a",
"b",
"c",
"d",
"e",
"f"
};

List<ListMemeber> list = new ArrayList<ListMemeber>();

for(String label : labels) {
list.add(new ListMemeber(label));
}

addComponent(list);
}

private void addComponent(List<ListMemeber> list) {
spaceCheckListForm = new SpaceCheckListForm("form", list);
add(spaceCheckListForm);
}

private class SpaceCheckListForm extends Form {

private static final long serialVersionUID = 1L;

public SpaceCheckListForm(String id, final List<ListMemeber> list) {
super(id);

ListView listView = new ListView("listView", list) {

private static final long serialVersionUID = 1L;

@Override
protected void populateItem(ListItem listItem) {
ListMemeber member = (ListMemeber) listItem.getModelObject();
listItem.add(new Label("label", member.getLabel()));
listItem.add(new CheckBox("checkbox", new PropertyModel(member, "selected")));
}
};

listView.setReuseItems(true);
add(listView);

AjaxButton submitBtn = new AjaxButton("submitBtn", this) {

private static final long serialVersionUID = 1L;

@Override
protected void onSubmit(AjaxRequestTarget target, Form form) {
System.out.println(spaceCheckListForm.getModelObject());
modalWindow.close(target);
}
};

add(submitBtn);
}

}

private class ListMemeber implements Serializable {
private String label;
private Boolean selected = Boolean.FALSE;

public ListMemeber(String label) {
this.label = label;
}

public String getLabel() {
return label;
}

public void setLabel(String label) {
this.label = label;
}

public Boolean getSelected() {
return selected;
}

public void setSelected(Boolean selected) {
this.selected = selected;
}

@Override
public String toString() {
return label + Boolean.toString(selected);
}
}

}

现在 onClick AjaxButton 它返回 null。我想获取标签和相应的复选框值。我该怎么做才能得到它?任何信息都会对我很有帮助。谢谢你。

最佳答案

您的组件层次结构如下所示:

SpaceCheckListWindow  
SpaceCheckListForm (id: form)
ListView (id: listView)
ListItem (id: <generated by wicket>)
Label (id: label)
CheckBox (id: checkbox)
AjaxButton (id: submitBtn)

在 Wicket 中,每个组件都可能有一个模型,用于存储它显示/操作的数据。这个模型通常在构造函数中传递给组件。如果没有发生这种情况,组件将使用空模型进行初始化(这本身不是错误)。但是在你的代码中,你的表单是用一个空模型创建的,而且也没有什么可以更新模型,所以 getModelObject()将始终返回 null。这又不是错误,您的表单本身不必具有模型对象。

这里唯一具有非平凡模型的组件是 CheckBox ,它读取/更新 selected领域 ListMemeber , 正如它应该。 (更新:当然你的 Label 也有一个非空模型,但标签只读取它们的模型,从不更新它。)

所以总结一下:这段代码没有什么根本性的错误,你只是在错误的地方寻找结果:而不是注销表单的模型对象,列出 selected所有列表成员的字段以查看提交表单时发生的变化。

关于 Wicket 模型的一些额外阅读: Working with Wicket models

关于java - Wicket 口:getModelObject 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5041425/

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