freemarker遍历map对象实例,这个与遍历list对象有点不同。当Map里面的key 是Object(String,Integer,etc)等要通过以下的方式来得到。
code
1
2
3
4
5
6
|
<#list testMap?keys as testKey>
< option value = "${testKey}" >
${testMap.get(testKey)}
</ option >
</#list>
|
或者使用:
code
1
2
3
4
5
6
|
<#list testMap.keySet() as testKey>
< option value = "${testKey}" >
${testMap.get(testKey)}
</ option >
</#list>
|
切记在webwork自带的freemarker中对Map中Key的定义为String类型(如果你想用${Map[key]}这样取值的话;如果用${Map.get(key}这样取值就可以用其他类型,如Map<Long,Object>),更高片本是否可以用其他类型本人未曾验证。
code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<#list pager.map.get("m") as list>
< li <#if (list_index + 1) % 4 == 0> class="end"</#if>>
< a href = "${base}${list.htmlFilePath}" class = "productImage" target = "_blank" >
< img src = "${base}${(list.productImageList[0].thumbnailProductImagePath)!systemConfig.defaultThumbnailProductImagePath}" alt = "${list.name}" />
</ a >
< div class = "productTitle" >
<#if (list.name?length < 28 )>
< a href = "${base}${list.htmlFilePath}" alt = "${list.name}" target = "_blank" >${list.name}</ a >
<#else>
< a href = "${base}${list.htmlFilePath}" alt = "${list.name}" target = "_blank" >${list.name[0..25]}...</ a >
</#if>
</ div >
< div class = "productBottom" >
< div class = "productPrice" >
< span class = "price" >${list.price?string(priceCurrencyFormat)}</ span >
< span class = "marketPrice" >${list.marketPrice?string(priceCurrencyFormat)}</ span >
</ div >
< div class = "productButton" >
< input type = "button" name = "addCartItemButton" class = "addCartItemButton addCartItem {id: '${list.id}'}" <#if list.isOutOfStock>value="缺货" disabled<#else>value="购买"</#if> hidefocus="true" />
< input type = "button" name = "addFavoriteButton" class = "addFavoriteButton addFavorite {id: '${list.id}'}" value = "收藏" hidefocus = "true" />
</ div >
</ div >
</ li >
</#list>
|
分享到:
相关推荐
5. **遍历map**:如果list中的元素是map,可以用`key`和`value`遍历键值对。 ```freemarker [0].properties as entry> 属性名: ${entry.key}, 值: ${entry.value} ``` 6. **反向遍历**:使用`reverse`指令...
以下是关于Freemarker语法和实例的详细讲解: 1. **概念** - **Sequence**:序列,类似于Java中的List、数组,存储非键值对的数据集合。 - **Hash**:键值对集合,对应于Java中的Map,存储键值对数据。 - **...
这些数据通常由Java对象提供,通过`ModelAndView`、`Map`或`ViewModel`等方式传递到FreeMarker。 在实际应用中,`TestFM`可能是一个测试FreeMarker功能的文件夹,包含了一些示例模板和对应的测试数据。例如,可能有...
以上就是一个FreeMarker的简单实例,展示了如何使用FreeMarker将Java对象与HTML模板结合,生成动态网页。在实际开发中,FreeMarker的强大功能远不止于此,它能帮助开发者实现灵活、高效且易于维护的视图层。
例如,你可以创建一个Map或JavaBean来封装数据,然后传递给FreeMarker的`Configuration`对象,由其负责解析模板并填充数据。 配置FreeMarker涉及到以下步骤: 1. 创建`Configuration`对象,设置模板目录和其它配置...
然后,通过Action类返回一个Map对象,这个对象的键值对将作为模板的数据模型。 接下来,我们关注一下实际的Freemarker模板文件。在本实例中,"freemarkerstruts2"可能包含一个或多个`.ftl`文件,如`index.ftl`,它...
- **循环(Loops)**: `#foreach`用于遍历集合,如数组、列表或Map。 - **包含(Includes)**: `#include`可以将一个模板嵌入到另一个模板中。 - **宏(Macros)**: 类似于函数,可以封装重复使用的模板片段。 ...
Freemarker提供了多种控制结构,如`#if`用于条件判断,`#foreach`用于循环遍历集合,`#set`用于变量赋值,`#include`用于引入其他模板等。这些结构使得模板可以具备一定的逻辑处理能力。 8. **变量和表达式** ...
在Java应用中,Freemarker通过ModelAndView或者Map对象将数据传递到视图层。开发者可以在Java后端准备数据模型,然后传递给Freemarker模板,模板根据模型中的数据生成HTML输出。 4. **与Struts2集成** Struts2是...
FreeMarker 实例:StaticPageServiceImpl 在实际项目中,FreeMarker可能与服务类如`StaticPageServiceImpl`结合,用于动态生成静态页面。此类可能包含方法,如`generatePage(FreeMarkerTemplate, DataModel)`,用于...
它可以是Java对象、Map、List等。 3. **Freemarker配置(Configuration)**: 配置对象负责管理模板加载、缓存策略、错误处理等。 4. **模板引擎(Processor)**: 处理模板与数据模型,生成最终的输出。 **二、...
例如,你可以使用Jackson的`ObjectMapper`将JSON字符串转化为Map或者自定义的Java类实例,之后在Freemarker模板中通过 `${}` 符号来访问这些对象的属性。 ```java // Jackson JSON解析示例 ObjectMapper mapper = ...
### Java生成静态页面——Freemarker实例教程 #### 一、Freemarker简介 Freemarker是一款基于模板的通用工具,它可以嵌入到各种应用程序中,帮助开发者将动态数据渲染成HTML、XML或其他文本格式的文件。对于提高...
`Template`类用于加载和解析模板文件,`getTemplate`方法可以从配置对象中获取模板实例。模板语言由指令(Directives)、表达式(Expressions)和控制结构(Control Structures)组成。 3. **`DataModel`**:数据...
在FreeMarker中输出变量值十分直观,可以是顶层变量、Map对象的成员或集合中的元素,使用`.`语法来访问Java对象的属性。 综上所述,FreeMarker作为一个强大的模板引擎,在Web开发和其他应用场景中都表现出色,其...
1. 创建`Configuration`实例,配置FreeMarker。 2. 加载模板文件,得到`Template`对象。 3. 创建数据模型,通常是Java Map或JavaBean。 4. 使用`Template`的`process`方法,将数据模型和模板合并,生成输出文本。 *...
- 在Java代码中,使用`Freemarker`实例加载模板,创建`Configuration`对象,设置模板目录,然后创建`Template`对象。接着,创建`Map, Object>`来存储数据模型,最后调用`Template`的`process`方法将数据合并到模板...