2010-07-11 14 views
0

Je joue avec des composants d'entrée de forme de guichet. J'ai essayé de mettre enum à un DropDownMenu:Ressource Wicket - chaîne introuvable?

public enum Choice { ONE, TWO, THREE } 

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

et a ajouté un fichier de propriétés:

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

D'après ce que je l'ai lu, il devrait fonctionner.
Mais je reçois:

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

Quel est le problème?

Merci,
Ondra

Répondre

1

Le EnumChoiceRenderer ne sait pas où chercher le fichier de propriétés.

Vous pouvez lui dire que le fichier de propriétés est associé à la page en ajoutant la page en tant que paramètre constructeur pour le moteur de rendu:

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

Vous avez raison - merci :) BTW - pourquoi ne son pas de DropDownChoice le constructeur se positionne comme la référence composante du rennerer si celle-ci est construite sans argument? Je pense que cela ne nuirait à rien. J'ai envie de déposer une RFE. WDYT? –

+0

Mais alors il serait à la recherche du fichier de propriété associé à DropDownChoice, qu'il devrait trouver dans les bibliothèques de wicket. Et il n'y aurait aucun moyen d'anticiper les propriétés que vous vouliez associer à votre énumération particulière. Vous pourriez probablement définir une sous-classe de DropDownChoice spécifiquement pour cette énumération et faire en sorte que la sous-classe possède la ressource, ce qui vous permettrait de lier ces choses ensemble. –

+0

Bon point! Je m'habitue toujours à la façon dont Wicket utilise intelligemment les fonctionnalités de Java. Merci. –