![]() |
||
|
||
![]() |
As you have seen, the data model is basically a tree. The tree can be arbitrarily complicated and deep, e.g.:
![]() | ![]() | ![]() | |
![]() |
| ![]() | |
![]() | ![]() | ![]() |
The variables that act as directories (the root, animals, mouse, elephant, python, whatnot) are called hashes. Hashes store other subvariables by a lookup name.
The variables that store a single value (size, price, test and because) are called scalars.
When you want to use a subvariable, you specify its path from the root, and separate the steps with dots. To access the price of a mouse, you start from the root and go into animals, and then go into mouse then go into price. So you write animals.mouse.price. When you put the special ${...} codes around an expression like this, you are telling FreeMarker to output the corresponding text at that point.
There is one more important kind of variable: sequences. They are similar to hashes, but they don't store names for the variables they contain. Instead, they store their subvariables sequentially, and you can access them with a numerical index. For example, in this data model, animals and whatnot.fruits are sequences:
![]() | ![]() | ![]() | |
![]() |
| ![]() | |
![]() | ![]() | ![]() |
To access a subvariable from a sequence you use a numerical index in square brackets. Indexes start from 0 (programming logic traditionally starts with 0), thus the index of the first item is 0, the index of the second item is 1, and so on. So to get the name of the first animal you write animals[0].name. To get the second item in whatnot.fruits (which is the string "banana") you write whatnot.fruits[1].
A scalar can store values of different types. The most commonly used types are:
String: Strings are text, that is, a sequence of characters such as ``m'', ``o'', ``u'', ``s'', ``e''. When you specify string value in FreeMarker you have to surround it with quotation marks, e.g.: "mouse" or 'mouse'
Number: It's a numerical value. The string "50" and the number 50 are two totally different things in FreeMarker. The former is just a sequence of two characters (which happens to be readable as a number for humans), while the latter is a numerical value that you can use, say, in arithmetical calculations. So, don't surround a number with quotation marks! This would cause FreeMarker to treat the number as a string. Examples of valid numbers: 0, 4999, -273, 3.14.
Summary:
The data model can be visualized hierarchically -- as a tree.
Scalars store a single value. The value can be a string or a number (and a few more... they will be introduced later).
Hashes are containers that store other variables and associate them with a unique lookup name.
Sequences are containers that store other variables in an ordered sequence. They can be retrieved via their numerical index.
![]() |
||
|
||
![]() |
![]() |
|
Page generated: 2004-06-15 22:17:59 GMT | FreeMarker Manual -- For FreeMarker 2.3 |