2008-11-06 23 views
5

J'utilise MessageFormat pour formater des adresses avec un modèle comme celui-ci:Des solutions de création de modèles légères en Java prenant en charge le formatage conditionnel?

"{0}\n{1}\n{2}\n{3}, {4} {5}" 

  • 0 = 1 rue
  • 1 = 2 rue
  • 2 = 3 rue
  • 3 = ville
  • 4 = état
  • 5 = zip

La plupart de ces champs sont facultatifs lorsqu'ils sont capturés. Comment éviter d'avoir une ligne vide quand par exemple, il n'y a pas de rue 3? Je pourrais utiliser un template comme celui-ci "{0} {1} {2} {3} {4} {5}" et remplacer "street 3 \ n" ou "" en conséquence, mais le template ne fournit pas beaucoup d'avantages pour le formatage.

Existe-t-il un moyen d'inclure des conditions dans la chaîne de format? Ou existe-t-il un autre outil de modélisation, de préférence léger, qui prend en charge le formatage conditionnel?

Répondre

2

Je ne sais pas à quel point vous le considéreriez léger, mais Apache Velocity est l'un des moteurs de template les plus connus pour Java.

1

Vous pouvez simplement faire la mise en forme comme vous le faites, puis supprimer les lignes vides en remplaçant une série de plusieurs '\n' s avec un seul '\n', par ex.

result = result.replaceAll("\n+", "\n"); 
+0

Nice moyen simple de résoudre la question posée - IMHO introduction d'un cadre de modèle juste pour formater une adresse est un peu exagéré. –

2

jguru StringTemplates

Il a été utilisé pour construire le site jGuru - il a été autour pendant un certain temps maintenant.

7

EDIT: réécrire ...

Si vous ne se soucient pas de la conception, alors vous pouvez facilement choisir un moteur de modèle au hasard, ou parce que vous aimez son nom, ou autre chose. Si vous n'avez pas de critères pour choisir un moteur, alors qui s'en soucie? D'autre part, si vous faites attention à la conception, comme dans l'utilisation du modèle de conception Modèle-Vue-Contrôleur (MVC), alors vos choix diminuent rapidement.

La plupart des réponses soulignent la puissance des différents moteurs de gabarit. Mais le but de MVC est de ne pas vouloir en faire plus, car en faire plus dans vos templates finira par vous faire très mal. La logique métier n'appartient pas à la vue, elle appartient au modèle. La logique de contrôle appartient au contrôleur. Il existe un seul moteur de modèle qui applique réellement le modèle MVC. Si vous ne désirez pas le modèle MVC (peut-être que vous allez au-delà), ce moteur vous aide à ne pas vous blesser et vous encourage à partitionner correctement vos fonctionnalités.

Il n'existe réellement qu'un seul bon moteur de modèle: StringTemplate.Voir http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf pour plus de détails sur pourquoi. Je l'ai utilisé sur plusieurs plates-formes (Python, Java, .Net) ainsi que de nombreuses alternatives et règles StringTemplate.

Décision prise. Prendre plaisir. Meilleurs vœux.

5

D'autres ont mentionné le modèle de chaîne, mais nous avons récemment passé à MVEL (qui fait aussi plus, mais n'ajoute pas beaucoup de poids): http://mvel.codehaus.org/ (et je le trouve plus facile à utiliser).

+0

deuxième à ce sujet - MVEL est génial! – bennyl

0

Freemarker est plutôt bon. C'est léger, rapide, a un formatage conditionnel, et une tonne d'autres fonctionnalités.

3

IMHO Chunk Templating engine est le meilleur. Le fichier jar a seulement 180 KB! et support IF et itération. À quel point cela est cool !

+1

Très cool en effet! –