2010-01-18 12 views
5

J'essaie d'enregistrer différentes instances de convertisseurs dans faces-config, en utilisant une classe de conversion standard à laquelle différents paramètres sont transmis.Propriété du convertisseur JSF

Le code ci-dessous enregistre deux DateTimeConverters, le premier pour les dates incluant l'heure et le second pour l'heure seulement. Mais la propriété de modèle n'est jamais définie. Cela peut-il être fait?

<converter> 
    <converter-id>dateTimeConverter</converter-id> 
    <converter-class>javax.faces.convert.DateTimeConverter</converter-class> 
    <property> 
     <property-name>pattern</property-name> 
     <suggested-value>yyyy-MM-dd HH:mm:ss</suggested-value> 
    </property> 
</converter> 

<converter> 
    <converter-id>timeConverter</converter-id> 
    <converter-class>javax.faces.convert.DateTimeConverter</converter-class> 
    <property> 
     <property-name>pattern</property-name> 
     <suggested-value>HH:mm:ss</suggested-value> 
    </property> 
</converter> 
+1

ne devrait pas être wiki de la communauté – Bozho

+0

En effet non. Modifiez votre question, décochez la case "Community Wiki" et sauvegardez. Community Wiki est destiné à être utilisé pour des questions/discussions subjectives uniquement. Votre question est loin d'être subjective. C'est juste une question technique/problème. – BalusC

+0

Vrai, je ne savais pas ce que c'était. Mais il n'y a pas de case à cocher dans la page d'édition pour la désactiver :( –

Répondre

6

Ceci n'est malheureusement pas possible via faces-config.xml. La déclaration <property> que vous essayez n'est pas utilisée pendant l'exécution.

Si tout ce que vous voulez est de contrôler le modèle à place, alors mieux que vous pouvez faire est de créer un convertisseur personnalisé. Pour ce but particulier, ce n'est pas si difficile. Juste étendre DateTimeConverter et définir le modèle pendant la construction. Voici un exemple de base:

public MyDateTimeConverter extends DateTimeConverter() { 
    public MyDateTimeConverter() { 
     setPattern("yyyy-MM-dd HH:mm:ss"); 
    } 
} 

Vous pouvez bien sûr obtenir le motif d'un autre endroit, par ex. un fichier de propriétés ou un fichier xml dans classpath.

Enregistrer ce convertisseur comme suit:

<converter> 
    <converter-for-class>java.util.Date</converter-for-class> 
    <converter-class>com.example.MyDateTimeConverter</converter-class> 
</converter> 

Cela devrait suffire. Pas besoin de f:converter ou UIOutput#setConverterId().

+0

Merci pour votre explication, mais quelle est l'utilisation de ces propriétés dans faces-config.xml ? (la balise de propriété fait partie du xsd) –

+0

@JurgenHannaert, regardez le [xsd] (http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd), il dit: _ Les attributs "attribut" et "propriété" sont destinés à permettre aux développeurs de composants de décrire plus complètement leurs composants aux outils et aux utilisateurs.Ces éléments n'ont pas de sémantique d'exécution requise._ –

+0

En effet, comme par exemple [ctrl + espace] autocomplete info-bulles/descriptions . – BalusC