加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – PropertyModel Expression的异常:org.apache.wicket.Wi

发布时间:2020-12-15 08:45:32 所属栏目:Java 来源:网络整理
导读:我使用PropertyModel作为DropDownChoice的一部分,如下所示: ListString choices = Arrays.asList(new String[] { "Library","School Office","Science Dept" }); String selected = "Library"; DropDownChoiceString serviceDDC = new DropDownChoiceString
我使用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);

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

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)

....

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

解决方法

由于你正在使用PropertyModel(this,“choices.0”),Wicket试图通过声明PropertyModel的类的方法getChoices()通过反射找到一个名为choices的属性. com.samoo.tool.pages.CreatePrintingJob中似乎不存在此方法,因为异常是在说明.

此外,如果0是索引,则应使用[index]表达式访问它,因为此JIRA问题建议:PropertyModel does not support index only property (“[0]”)

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

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

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

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

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

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

> Using the DropDownChoice component
> Working with Wicket Models

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读