尝试在组件的null模型上设置模型对象:DropDownChoice

时间:2015-10-19 12:45:46

标签: java wicket dropdownchoice

我使用wicket向导让用户采取多个步骤进行注册 但不知怎的,我得到了这个错误:

  

最后一个原因:尝试在组件的空模型上设置模型对象:向导:form:view:sprachenDrop

  WicketMessage:方法onFormSubmitted接口org.apache.wicket.markup.html.form.IFormSubmitListener,目标是[Form [Component id = form]] on component [Form [Component id = form]]引发异常

来自堆栈跟踪的这个片段:

  

根本原因:
  java.lang.IllegalStateException:尝试在组件的null模型上设置模型对象: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)        在org.apache.wicket.markup.html.form.FormComponent.updateModel(FormComponent.java:1098)        在org.apache.wicket.markup.html.form.Form $ FormModelUpdateVisitor.component(Form.java:230)        在org.apache.wicket.markup.html.form.Form $ FormModelUpdateVisitor.component(Form.java:200)

参考this post我试图创建一个类来保存我需要的信息,但它没有用,我把this tutorial作为基础。从Wicket的帮助本身我尝试了this code,从而创建了一个IClusterable类来保存信息。错误仍然是一样的。由于DropDownChoice附带了一个能够将List作为模型保存的构造函数,因此我认为我的代码应该可以正常工作。

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));

不被接受。

1 个答案:

答案 0 :(得分:1)

创建一个本地字符串 private String sprachenDrop;并添加getter / setter。然后添加:

add(korrespondenzsprache = new DropDownChoice<String>("sprachenDrop", 
new PropertyModel(this, "sprachenDrop"), sprachen));

应该有效。