尝试在组件的空模型上设置模型对象:DropDownChoice
Attempt to set model object on null model of component: DropDownChoice
我正在使用 wicket 向导让用户执行多个注册步骤。
但不知何故我得到这个错误:
Last cause: Attempt to set model object on null model of component: wizard:form:view:sprachenDrop
WicketMessage: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [Form [Component id = form]] on component [Form [Component id = form]] threw an exception
堆栈跟踪中的这段代码:
Root cause:
java.lang.IllegalStateException: Attempt to set model object on null model of component: wizard:form:view:sprachenDrop
at org.apache.wicket.Component.setDefaultModelObject(Component.java:3038)
at org.apache.wicket.markup.html.form.FormComponent.setModelObject(FormComponent.java:1577)
at org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1098)
at org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:230)
at org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:200)
参考 this post I tried to create a class to hold the information I need, but it didn't work, I took this tutorial as basic. From Wicket's help itself I tried this code 并因此创建了一个 IClusterable class 来保存信息。错误还是一样。由于 DropDownChoice
带有一个构造函数,该构造函数能够将列表作为模型保存,因此我认为我的代码应该可以工作。
public class StepPersoenlicheDaten extends WizardStep{
private static final long serialVersionUID = 1L;
private RequiredTextField<String> name, vorname, strasse, ort, telefonNr;
private DropDownChoice<String> korrespondenzsprache;
private List<String> sprachen = new ArrayList<String>();
public StepPersoenlicheDaten(WizardModel model) {
super(new ResourceModel("daten.title"), new ResourceModel("daten.summary"));
init(model);
java.util.Collections.addAll(sprachen, "Deutsch","English","Français","Italiano");
add(name = new RequiredTextField<String>("name", Model.of("")));
add(vorname = new RequiredTextField<String>("vorname", Model.of("")));
add(strasse = new RequiredTextField<String>("strasse", Model.of("")));
add(ort = new RequiredTextField<String>("ort", Model.of("")));
add(telefonNr = new RequiredTextField<String>("telefonNr", Model.of("")));
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop", sprachen));
}
}
单击向导上的完成(或下一步)按钮时出现错误。我不知道还有什么办法可以修复它。
编辑:
IModel<Collection<? extends String>> langs = Model.of(sprachen);
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop", langs));
未被接受。
创建一个本地字符串,例如
private String sprachenDrop;
并添加 getters/setters。然后添加:
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop",
new PropertyModel(this, "sprachenDrop"), sprachen));
应该可以。
我正在使用 wicket 向导让用户执行多个注册步骤。
但不知何故我得到这个错误:
Last cause: Attempt to set model object on null model of component: wizard:form:view:sprachenDrop
WicketMessage: Method onFormSubmitted of interface org.apache.wicket.markup.html.form.IFormSubmitListener targeted at [Form [Component id = form]] on component [Form [Component id = form]] threw an exception
堆栈跟踪中的这段代码:
Root cause:
java.lang.IllegalStateException: Attempt to set model object on null model of component: wizard:form:view:sprachenDrop at org.apache.wicket.Component.setDefaultModelObject(Component.java:3038) at org.apache.wicket.markup.html.form.FormComponent.setModelObject(FormComponent.java:1577) at org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1098) at org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:230) at org.apache.wicket.markup.html.form.Form$FormModelUpdateVisitor.component(Form.java:200)
参考 this post I tried to create a class to hold the information I need, but it didn't work, I took this tutorial as basic. From Wicket's help itself I tried this code 并因此创建了一个 IClusterable class 来保存信息。错误还是一样。由于 DropDownChoice
带有一个构造函数,该构造函数能够将列表作为模型保存,因此我认为我的代码应该可以工作。
public class StepPersoenlicheDaten extends WizardStep{
private static final long serialVersionUID = 1L;
private RequiredTextField<String> name, vorname, strasse, ort, telefonNr;
private DropDownChoice<String> korrespondenzsprache;
private List<String> sprachen = new ArrayList<String>();
public StepPersoenlicheDaten(WizardModel model) {
super(new ResourceModel("daten.title"), new ResourceModel("daten.summary"));
init(model);
java.util.Collections.addAll(sprachen, "Deutsch","English","Français","Italiano");
add(name = new RequiredTextField<String>("name", Model.of("")));
add(vorname = new RequiredTextField<String>("vorname", Model.of("")));
add(strasse = new RequiredTextField<String>("strasse", Model.of("")));
add(ort = new RequiredTextField<String>("ort", Model.of("")));
add(telefonNr = new RequiredTextField<String>("telefonNr", Model.of("")));
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop", sprachen));
}
}
单击向导上的完成(或下一步)按钮时出现错误。我不知道还有什么办法可以修复它。
编辑:
IModel<Collection<? extends String>> langs = Model.of(sprachen);
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop", langs));
未被接受。
创建一个本地字符串,例如
private String sprachenDrop;
并添加 getters/setters。然后添加:
add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop",
new PropertyModel(this, "sprachenDrop"), sprachen));
应该可以。