2010-07-11 103 views
0

我在玩wicket的窗体输入组件。我试图把一个enumDropDownMenuWicket资源 - 找不到字符串?

public enum Choice { ONE, TWO, THREE } 

    cz.oz.wicket.pages.form.FormPage.java 
    -------------- 
    .add(new DropDownChoice("choice", 
    Arrays.asList(Choice.values()), new EnumChoiceRenderer()) 
    ) 

,并增加了属性文件:

cz.oz.wicket.pages.form.FormPage.properties 
-------------- 
Choice.ONE = Jedna 
Choice.TWO = Dvě 
Choice.THREE = Tři 

据我读过,它应该工作。
但我得到:

java.util.MissingResourceException: Unable to find property: 'Choice.ONE' 

at org.apache.wicket.Localizer.getString(Localizer.java:344) 
at org.apache.wicket.Localizer.getString(Localizer.java:100) 
at org.apache.wicket.markup.html.form.EnumChoiceRenderer.getDisplayValue(EnumChoiceRenderer.java:82) 
at org.apache.wicket.markup.html.form.EnumChoiceRenderer.getDisplayValue(EnumChoiceRenderer.java:39) 
at org.apache.wicket.markup.html.form.AbstractChoice.appendOptionHtml(AbstractChoice.java:384) 
at org.apache.wicket.markup.html.form.AbstractChoice.onComponentTagBody(AbstractChoice.java:361) 
at org.apache.wicket.Component.renderComponent(Component.java:2619) 
... 

有什么不对?

感谢,
Ondra

回答

1

的EnumChoiceRenderer不知道到哪里寻找属性文件。

您可以通过添加页面渲染器构造函数的参数告诉它的属性文件与页面关联:

cz.oz.wicket.pages.form.FormPage.java 
    -------------- 
    .add(new DropDownChoice("choice", 
    Arrays.asList(Choice.values()), new EnumChoiceRenderer(this)) 
    ) 
+0

你是对的 - 谢谢:) 顺便说一句 - 为什么不DropDownChoice的构造函数将自身设置为renrerer的组件引用(如果该构造没有参数)?我认为这不会伤害任何东西。我想提交RFE。 WDYT? – 2010-07-11 23:50:14

+0

但是,它会寻找与DropDownChoice相关的属性文件,它必须在wicket库中找到。而且没有办法预测你想要的特性与你的特定枚举相关联。 您可能会专门为此枚举定义DropDownChoice的子类,并使子类拥有资源,这将允许您将这些东西整齐地绑定在一起。 – 2010-07-12 00:27:36

+0

好点!我仍然习惯了Wicket聪明地使用Java的特性。谢谢。 – 2010-07-17 00:07:11