PropertyModel Expression的异常:org.apache.wicket.WicketRuntimeException:没有为类定义get方法:

Bes*_*est 3 java wicket

我用作以下内容PropertyModel的一部分DropDownChoice:

    List<String> choices = Arrays.asList(new String[] { "Library", "School Office", "Science Dept" });
    String selected = "Library";

    DropDownChoice<String> serviceDDC = 
            new DropDownChoice<String>("service",  new PropertyModel(this, "choices.0"), choices); 
Run Code Online (Sandbox Code Playgroud)

不知怎的,我得到了这个例外:

caused by: org.apache.wicket.WicketRuntimeException: No get method defined for class: class com.samoo.tool.pages.CreatePrintingJob expression: choices
    at org.apache.wicket.util.lang.PropertyResolver.getGetAndSetter(PropertyResolver.java:481)
    at org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:332)
    at org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:242)
    at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:95)
    at org.apache.wicket.model.AbstractPropertyModel.getObject(AbstractPropertyModel.java:130)
    at org.apache.wicket.Component.getDefaultModelObject(Component.java:1724)

....
Run Code Online (Sandbox Code Playgroud)

我知道表达式有问题.我一直在尝试不同的参数输入,但它仍然无法正常工作.有人可以帮忙吗?

Xav*_*ica 6

自从您使用以来PropertyModel(this, "choices.0"),Wicket试图choices通过getChoices()声明PropertyModel的类的方法来查找通过反射命名的属性.这种方法似乎并不存在com.samoo.tool.pages.CreatePrintingJob,因为例外是陈述.

此外,如果这0是一个索引,您应该使用[index]表达式访问它,因为此JIRA问题建议:PropertyModel不支持仅索引属性("[0]")

但是,似乎你想初始化DropDownChoice为第一个元素choices.但是,如果您将DropDownChoice的模型设置为PropertyModel(this, "choices.[0"])将以下列方式映射此DropDownChoice的选择,Wicket会做什么:

  • 在表单呈现时呈现(预)选择的选项,它将使用choices列表中的第一个元素.
  • 在表单提交时间存储用户选择的值时,它会将选择存储在choices列表的第一个位置.

总而言之,表示DropDownChoice选择的后备对象将是choices列表中的第一个元素.

因此,您可能希望为表示DDC选择的后备对象使用与选项列表无关的完全不同的模型.

List<String> choices = Arrays.asList(new String[] { "Library", "School Office", 
       "Science Dept" });
String selected = "Library";
IModel dropdownModel = new Model<String>(choices[0]);
DropDownChoice<String> serviceDDC = 
        new DropDownChoice<String>("service",  dropdownModel, choices);
Run Code Online (Sandbox Code Playgroud)

您可能会发现以下链接很有用: