Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Any lightweight templating solutions in Java with support for conditional formatting?

I'm using MessageFormat to format some addresses with a template like this:

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

where

  • 0 = street 1
  • 1 = street 2
  • 2 = street 3
  • 3 = city
  • 4 = state
  • 5 = zip

Most of these fields are optional when captured. How do I avoid having an empty line when for instance, there is not street 3? I could use a template like this "{0}{1}{2}{3}{4}{5}" and then substitute either "street 3\n" or "" accordingly, but then the template doesn't provide much benefit toward formatting.

Is there a way to include conditionals in the format string? Or is there another, preferably lightweight, templating tool available that supports conditional formatting?

like image 969
s_t_e_v_e Avatar asked Nov 06 '08 21:11

s_t_e_v_e


4 Answers

EDIT: rewrite...

If you don't care about design, then you can readily pick a template engine at random, or because you like its name, or whatever. If you don't have criteria for selecting an engine, then who cares which one you pick?

On the other hand, if you do care about design, such as in using the Model-View-Controller (MVC) design pattern, then your choices quickly diminish.

Most of the answers here emphasize the power of the various template engines. But the whole point of MVC is that you don't want to do more, because doing more in your templates will eventually hurt you very bad. Business logic does not belong in the View, it belongs in the Model. Control logic belongs in the controller. There is only one template engine that actually enforces the MVC pattern. If you don't desire the MVC pattern (perhaps you are moving beyond it), that one engine still helps you to not hurt yourself and encourages you to partition your functionality properly.

There is really only one good template engine: StringTemplate. See http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf for details of why.

I have used it on multiple platforms (Python, Java, .Net) as well as many of the alternatives, and StringTemplate rules.

Decision done. Enjoy. Best wishes.

like image 145
Rob Williams Avatar answered Nov 15 '22 00:11

Rob Williams


Others have mentioned string template, but we recently switched to MVEL (which also does more, but really doesn't add much weight): http://mvel.codehaus.org/ (and I find it easier to use).

like image 33
Michael Neale Avatar answered Nov 14 '22 23:11

Michael Neale


IMHO Chunk Templating engine is the best. The jar file only has 180 KB! and support IF and iteration. How cool is that !

like image 21
dns Avatar answered Nov 15 '22 00:11

dns


Don't know how lightweight you'd consider it but Apache Velocity is one of the best-known templating engines for Java.

like image 29
sk. Avatar answered Nov 15 '22 01:11

sk.